Bonjour à tous,
j'ai une fonction qui me permet de créer un tableau dynamique croisé en PHP affichant le nombre d'entrées dans des sites en fonction du tarif. Dans certains cas, il est possible qu'un site particulier n'enregistre pas d'entrées pour un tarif et dans ce cas, je complète de manière dynamique le nombre d'entrées.
Pour ce faire, j'utilise la fonction array_map comme ci-dessous :
$t['fares'] = \array_map(function($a, $b) {
return ($a['fare_id'] == $b['idfare']) ? $a : ['fare_id' => $b['idfare'], 'total' => 0, 'total_price' => 0, 'discount' => 0];
}, $t['fares'], $view->fares);
/*
* $t['fares'] est un tableau qui contient les entrées des sites
* $view->fares est un tableau qui contient l'ensemble des tarifs présent en base de données
*
* Pour info, un var_dump de $view->fares donne ceci :
* array (size=2)
* 0 =>
* array (size=2)
* 'idfare' => int 1
* 'name' => string 'adulte' (length=6)
* 1 =>
* array (size=2)
* 'idfare' => int 2
* 'name' => string 'enfant' (length=6)
*/
Malheureusement, cette fonction fonctionne bien si les entrées au tarif enfant sont manquantes.
Dans le cas présent, il s'agit des entrées au tarif adulte qui sont manquantes pour un site (présence des entrées au tarif enfant) et le résultat n'est donc pas correct :
array (size=2)
0 =>
array (size=4)
'fare_id' => int 1
'total' => int 0
'total_price' => int 0
'discount' => int 0
1 =>
array (size=4)
'fare_id' => int 2
'total' => int 0
'total_price' => int 0
'discount' => int 0
Alors que je derait avoir ceci :
array (size=2)
0 =>
array (size=4)
'fare_id' => int 1
'total' => int 0
'total_price' => int 0
'discount' => int 0
1 =>
array (size=4)
'fare_id' => int 2
'total' => int 4
'total_price' => int 28
'discount' => int 0
Je sais que le problème vient de la condition dans le array_map
mais je ne sais pas comment régler ce problème...
Une idée ?
Merci d'avance,
Romain
En fait, j'ai résolu mon problème avec une simple boucle foreach...