Page 1 sur 1

boucles imbriqués

Posté : 10 févr. 2007, 00:26
par Moker
Bonsoir,

j'ai un souci pour parcourir un tableau dont la profondeur varie.
j'ai créé une classe qui renvoi l'arborescence de ma base sous la forme d'un tableau.

voici comment j'affiche ce dernier :
<?php
include ("./global.inc.php");

$arbre = new rubrique();
$arbre->compte_niveaux(); // Nombre de niveaux de l'arbre
$arbre->cre_arbre(); // renvoi l'arbre complet sous forme de tableau

?>

<html>

<?php

echo "<ul>";
echo "<li>".$arbre->titre; // affiche le titre de la racine
// pour chaque enfant
for($i=0;$i<$arbre->nbenfants;$i++)
{
	echo "<ul>";
	echo "<li>".$arbre->enfants[$i]->titre; // affiche le titre de l'enfant
	// et ainsi de suite
	for($j=0;$j<$arbre->enfants[$i]->nbenfants;$j++)
	{
		echo "<ul>";
		echo "<li>".$arbre->enfants[$i]->enfants[$j]->titre;
		// ....
		echo "</ul>";
	}
	
	echo "</ul>";
}

echo "</ul>";

?>

</html>
pour l'instant ma boucle imbriquée ne parcour que 3 niveaux, comment puis-je faire parcourir ce tableau n fois, ou n serait la profondeur de l'arbre ($arbre->nbniveaux) ?

merci à vous !

Posté : 10 févr. 2007, 01:23
par Truc
une fonction récursive :-k
si tu as a faire à un tableau alors il faut reexécuter la fonction.

NDHR: retiré code non-fonctionnel pour éviter toute confusion

Posté : 10 févr. 2007, 11:09
par Hubert Roksor
A priori la fonction en question devrait ressembler à
function afficher_rubriques($rubriques)
{
	echo '<ul>';

	foreach ($rubriques as $rubrique)
	{
		echo '<li>', $rubrique->titre, '</li>';

		if (!empty($rubrique->enfants)
		{
			afficher_rubriques($rubrique->enfants);
		}
	}

	echo '</ul>';
}
Lors du premier appel il ne faut pas oublier de mettre ton objet "arbre" dans un tableau. Ensuite, pour chaque "rubrique" du tableau, on affiche le titre puis les enfants, si applicable.

Mon conseil : foreach est beaucoup plus pratique que for.
afficher_rubriques(array($arbre));

Posté : 10 févr. 2007, 13:56
par Truc
NDHR: retiré code non-fonctionnel pour éviter toute confusion
:langue:

Ok j'ai griffonné un truc à la va vite... mais c'était pour l'idée de la récursivité :wink:

Posté : 10 févr. 2007, 14:28
par Moker
merci à tous les deux :wink: ca fonctionne parfaitement la fonction parcours tous les niveau de sous-branches.

merci pour votre aide :)