boucles imbriqués

Eléphant du PHP | 71 Messages

10 févr. 2007, 00:26

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 !
Modifié en dernier par Moker le 10 févr. 2007, 14:22, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 févr. 2007, 01:23

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

10 févr. 2007, 11:09

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));

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 févr. 2007, 13:56

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 71 Messages

10 févr. 2007, 14:28

merci à tous les deux :wink: ca fonctionne parfaitement la fonction parcours tous les niveau de sous-branches.

merci pour votre aide :)