Bonjour,¨
j'ai une structure de tableaux qui peut contenir d'autres tableaux. Je ne connais pas le nombre de niveaux de tableau de tableau de tableau, etc....
J'ai une structure comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $conditions = array ( 'objet1' => 'valeur1', 'objet2 => 'valeur2', 'conditions' => array ( 'objet1' => 'valeur', 'conditions' = array ( ...... ) ) )
J'ai réussi à développer l'algorithme qui passe en revue tout le tableau. Evidemment, ce tableau est comparé avec d'autres valeurs. J'arrive à modifier les valeurs, mais je n'arrive pas à retourner le tableau 'conditions' (tableau principal) avec les nouvelles valeurs. Je pense qu'il est plus simple de passer le tableau 'conditions' (array_to_check) par référence. Je sais que le problème provient de ma fonction array_push($tab_index, $value['conditions']); En fait, je ne prends que le tableau enfant (à cause de l’initialisation en début de fonction), ce qui explique pourquoi je ne vois pas les valeurs modifiées dans les tableaux enfants (le changement de valeur fonctionne pour le tableau de plus haut niveau, mais seulement celui-ci. Dès qu'on atteint les enfants (['conditions']['conditions']), cela ne fonctionne plus).
Appel dans le main (valeur en ordre, vérifié avec xdebug)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function fn_check_conditions(&$array_to_check, $level, $tab_json) { if (!empty($array_to_check)) { $tab_index = array(); foreach($array_to_check as $main_key => &$main_value) { foreach ($main_value as $key => &$value) { if (empty($value['conditions'])) { fn_decode_data($tab_json, $value, $level); } else { array_push($tab_index, $value['conditions']); } } } $level = $level + 1; fn_check_conditions($tab_index, $level, $tab_json); } }
Je précise que les tableaux enfants ont tous le même nom ['conditions']. Je suis obligé de travaillé avec cette structure, car le core du CMS a besoin de cette structure pour charger en base de données. Il est absolument exclu de modifier le core du CMS.
Code : Sélectionner tout - Visualiser dans une fenêtre à part fn_check_conditions(array($tab_native['conditions']['conditions']), 1, $tab_value_to_compare);
Pouvez-vous m'aider ?
Merci
Partager