J'ai $menu_array3
commebâtiment liste des menus récursive de navigation
Array
(
[9] => Array
(
[category_name] => cat1
[category_id] => 9
[children] => Array
(
[12] => Array
(
[category_name] => test5
[category_id] => 12
)
[10] => Array
(
[category_name] => cat2
[category_id] => 10
[children] => Array
(
[15] => Array
(
[category_name] => cat7
[category_id] => 15
[children] => Array
(
[18] => Array
(
[category_name] => cat10
[category_id] => 18
)
[16] => Array
(
[category_name] => cat8
[category_id] => 16
)
)
)
[17] => Array
(
[category_name] => cat9
[category_id] => 17
)
)
)
)
)
[11] => Array
(
[category_name] => cat3
[category_id] => 11
[children] => Array
(
[13] => Array
(
[category_name] => cat5
[category_id] => 13
)
)
)
)
ref pour this answer J'ai essayé de construire le menu de navigation à l'aide
function build_nav($category_name, $data)
{
$result = array();
foreach ($data as $row)
{
if ($row['category_name'] == $category_name)
{
$result = "<li>" . $row['category_name'] . "</li>";
$result= build_nav($row['category_name'], $data);
}
}
return $result;
}
$menu="<ul>";
$menu.=build_nav('cat1', $menu_array3);
$menu.="</ul>";
echo "menu <pre>"; print_r($menu); echo "</pre>";
Mais je fus arrêté par
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 261900 bytes)
Je vous demande de me corriger avec des suggestions. Merci à l'avance Modifier J'ai trouvé la solution pour générer le menu de navigation directement à partir de db à https://stackoverflow.com/a/3380296/1528701
Vous remettez la structure '$ data' complète pour chaque itération des étapes de traitement récursives. Ainsi, chaque niveau de récursivité commence avec les mêmes données, ce qui signifie évidemment qu'il s'agit d'une boucle sans fin copiant les données encore et encore. Cette _must_ conduit au script se faire tuer par le serveur http. Au lieu de '$ data', vous devez remettre uniquement la partie des données qui se trouve réellement dans la catégorie qui vous intéresse pour la récursivité. Dans ce cas, c'est probablement l'entrée 'children'. – arkascha
@arkascha Merci! Si j'écris 'array_pop()', ses enfants seront supprimés avant même qu'ils ne soient pris en compte pour le formatage. Quel peut être l'autre moyen de contourner le problème pour supprimer les données traitées! –
Utilisez simplement '$ data ['children']', ou ai-je oublié quelque chose? Il serait également plus élégant d'utiliser des références pour ces appels récursifs au lieu de copier-par-valeur. De plus, vous n'obtiendrez pas un menu hiérarchique comme vous le souhaitez avec le code actuel. Mais vous comprendrez vous-même une fois que vous parvenez à obtenir une sortie utilisable. – arkascha