Listing Recursif
Résolu/Fermé7 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 718
16 mai 2017 à 13:57
16 mai 2017 à 13:57
Voici la réponse ...
<?php error_reporting(E_ALL); ini_set('display-errors',"on"); function get_arbo($inputArray){ $max = count($inputArray); $tree = array(); $flat = array(); // Create a flat hierarchy array of all entries by their id for ($i = 0; $i < $max; $i++) { $n = $inputArray[$i]; $id = $n['categorie_id']; $flat[$id] = $n; } // Then check all those entries by reference foreach ($flat as $key => &$child) { if (!isset($child['children'])) $child['children'] = array(); $id = $child['categorie_id']; $pid = $child['parent_id']; if ($pid > 0) { $flat[$pid]['children'][] = &$child; } else { $tree[$id] = &$child; } } return array_values($tree); } function display($arr,$cat_parent="", &$out=array()){ foreach($arr as $C){ $nom_categorie = !empty($C['nom_categorie']) ? $C['nom_categorie'] : $cat_parent; $children = !empty($C['children']) ? $C['children'] : NULL; $out[] = $cat_parent . " " . $nom_categorie; if(is_array($children)){ display($children,$cat_parent . " " . $nom_categorie ,$out); } } } $test = array(); $test[0]['parent_id'] = 0; $test[0]['categorie_id'] = 18; $test[0]['nom_categorie'] = "test"; $test[1]['parent_id'] = 0; $test[1]['categorie_id'] = 20; $test[1]['nom_categorie'] = "test2"; $test[2]['parent_id'] = 18; $test[2]['categorie_id'] = 21; $test[2]['nom_categorie'] = "test3"; $test[3]['parent_id'] = 21; $test[3]['categorie_id'] = 22; $test[3]['nom_categorie'] = "test33"; display(get_arbo($test),"",$out); echo "<pre>"; print_r($out); echo "</pre>";
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 718
11 mai 2017 à 01:02
11 mai 2017 à 01:02
Bonjour,
Petit problème ... l'exemple que tu donnes ... ne correspond pas à l'array que tu nous donnes...
Difficile dans ces conditions de savoir exactement ce que tu as et ce que tu veux....
Mais bon, je tente ma chance :
Petit problème ... l'exemple que tu donnes ... ne correspond pas à l'array que tu nous donnes...
Difficile dans ces conditions de savoir exactement ce que tu as et ce que tu veux....
Mais bon, je tente ma chance :
// $tonArray => ton array $newarray = array(); foreach($tonArray as $R){ $newarray [$R['parent_id']][$R['categorie_id']] = $R['nom_categorie']; } echo "<pre>"; print_r($newarray); echo "</pre>";
Par exemple ce tableau
$test[0][parent_id] = 0;
$test[0][categorie_id] = 18;
$test[0][nom_categorie] = test;
$test[1][parent_id] = 0;
$test[1][categorie_id] = 20;
$test[1][nom_categorie] = test2;
$test[2][parent_id] = 18;
$test[2][categorie_id] = 21;
$test[2][nom_categorie] = test3;
$test[3][parent_id] = 21;
$test[3][categorie_id] = 22;
$test[3][nom_categorie] = test33;
et j'aimerais en sortie
$res[0] = test
$res[1] = test2
$res[2] = test test3
$res[3] = test test3 test33
C'est plus clair comme ca ? Merci :)
$test[0][parent_id] = 0;
$test[0][categorie_id] = 18;
$test[0][nom_categorie] = test;
$test[1][parent_id] = 0;
$test[1][categorie_id] = 20;
$test[1][nom_categorie] = test2;
$test[2][parent_id] = 18;
$test[2][categorie_id] = 21;
$test[2][nom_categorie] = test3;
$test[3][parent_id] = 21;
$test[3][categorie_id] = 22;
$test[3][nom_categorie] = test33;
et j'aimerais en sortie
$res[0] = test
$res[1] = test2
$res[2] = test test3
$res[3] = test test3 test33
C'est plus clair comme ca ? Merci :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 718
13 mai 2017 à 15:30
13 mai 2017 à 15:30
Voici un début de réponse : une fonction qui transforme ton array ... en un array structuré hierachiquement
Donc à partir de là .. tu peux utiliser ce nouvel array pour réaliser ton affichage.
(il faudra le parcourir en utilisant la fonction is_array et refaire du récursif pour parcourir tous les noeuds enfants )
$result = get_arbo($test); function get_arbo($inputArray){ $max = count($inputArray); $tree = array(); $flat = array(); // Create a flat hierarchy array of all entries by their id for ($i = 0; $i < $max; $i++) { $n = $inputArray[$i]; $id = $n['categorie_id']; $flat[$id] = $n; } // Then check all those entries by reference foreach ($flat as $key => &$child) { if (!isset($child['children'])) $child['children'] = array(); $id = $child['categorie_id']; $pid = $child['parent_id']; if ($pid > 0) { $flat[$pid]['children'][] = &$child; } else { $tree[$id] = &$child; } } return array_values($tree); }
Donc à partir de là .. tu peux utiliser ce nouvel array pour réaliser ton affichage.
(il faudra le parcourir en utilisant la fonction is_array et refaire du récursif pour parcourir tous les noeuds enfants )
Pour jordane45 : La problème c'est que j'ai du mal avec le recursif...
Donc si c'est pour en refaire un derriere ca ne m'avance pas :(
Pour forum92 : Ta solution ne fonctionne pas, je n'ai rien du tout :(
Donc si c'est pour en refaire un derriere ca ne m'avance pas :(
Pour forum92 : Ta solution ne fonctionne pas, je n'ai rien du tout :(
forum92
Messages postés
220
Date d'inscription
lundi 6 juillet 2015
Statut
Membre
Dernière intervention
14 août 2018
133
16 mai 2017 à 13:12
16 mai 2017 à 13:12
Est tu sur que tu n'as pas une erreur ailleurs car il me semble que ma solution marche...
forum92
Messages postés
220
Date d'inscription
lundi 6 juillet 2015
Statut
Membre
Dernière intervention
14 août 2018
133
13 mai 2017 à 20:24
13 mai 2017 à 20:24
Bonjour,
Tu sais que toutes les entrées de ton tableau ont la même structure. Je te propose donc tout simplement :
Tu sais que toutes les entrées de ton tableau ont la même structure. Je te propose donc tout simplement :
<?php $res= array(); for( $i =0; $i<$test.length; $i++){ $res[$i] = $test[$i]['nom_categorie']; } ?>
17 mai 2017 à 19:09