[PHP] Fonction récursive dans une boucle

Fermé
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 - 15 mars 2009 à 15:59
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 15 mars 2009 à 17:45
Bonjour,

Je galère depuis un moment sur une fonction récursive permettant d'afficher une arborescence de dossiers. Cette dernière fonctionne mais je ne suis pas sur de bien comprendre son fonctionnement.... En effet, dans cette fonction récursive, j'ai une boucle qui tourne tant qu'il reste des dossiers à afficher. Mais dans cette boucle, j'ai un appel récursif à cette même fonction....

J'ai l'impression que la récursion est appelé uniquement quand le dernier tour de boucle arrive (et non pas à chaque fois que le programme rentre dans la boucle comme je le pensais). Voici mon code :

function display_children($parent, $level) { 

   //Affichage de tous les dossiers de niveau N
   $result = mysql_query("SELECT * FROM arborescence WHERE parentDossier='$parent'"); 


while ($row = mysql_fetch_array($result)) {
 $levelSousDossier = $level+1;
 echo str_repeat('  ',$levelSousDossier);?>
<img src="images/icones/dossier.jpg"><a name="<?php echo $row['idDossier'];?>" href="mesdocuments.php?idDossier=<?php echo $row['idDossier'];?>">
   <?php echo $row['nomDossier'].'<br>';?>
  <?php
    display_children($row['idDossier'], $level+1); 
 }
?>
<?php
}


Es-ce que quelqu'un peut m'expliquer le fonctionnement de la fonction svp ?

Merci d'avance..
A voir également:

3 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 mars 2009 à 17:34
<?php
function display_children($parent, $level) { 

   //Affichage de tous les dossiers de niveau N
   $result = mysql_query("SELECT * FROM arborescence WHERE parentDossier='$parent'"); 


	while ($row = mysql_fetch_array($result)) {
		$levelSousDossier = $level+1;
		echo str_repeat('&nbsp;&nbsp;',$levelSousDossier);?>
		<img src="images/icones/dossier.jpg"><a name="<?php echo $row['idDossier'];?>" href="mesdocuments.php?idDossier=<?php echo $row['idDossier'];?>">
		<?php echo $row['nomDossier'].'<br>';
		
		display_children($row['idDossier'], $level+1); 
	}
?
<?php
}
?>
 premier passage de boucle la requette met les réponses du niv1 dans la ressource $result
 
 mais dans la boucle while comme tu rappelle la fonction display_children tu reexecutes la requette sur le niveau 2 ce qui fiat que les réponses viennent écraser £result, 
  essayes un truc dans ce genre pour avoir une ressource différente par chaque boucle (j'ai pas tésté)
 <?php
 $i=0;
function display_children($parent, $level) { 

   //Affichage de tous les dossiers de niveau N
   ${'result'.$i} = mysql_query("SELECT * FROM arborescence WHERE parentDossier='$parent'"); 


	while ($row = mysql_fetch_array(${'result'.$i})) {
		$levelSousDossier = $level+1;
		echo str_repeat('&nbsp;&nbsp;',$levelSousDossier);
		?>
		<img src="images/icones/dossier.jpg"><a name="<?php echo $row['idDossier'];?>" href="mesdocuments.php?idDossier=<?php echo $row['idDossier'];?>">
		<?php 
		echo $row['nomDossier'].'<br>';
		
		display_children($row['idDossier'], $level+1); 
	}
	$i++;
}

1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 mars 2009 à 17:45
Après réflexion ce serait plutôt comme ça:
<?php

function display_children($parent, $level) { 

   //Affichage de tous les dossiers de niveau N
   ${'result'.$level} = mysql_query("SELECT * FROM arborescence WHERE parentDossier='$parent'"); 


	while ($row = mysql_fetch_array(${'result'.$level})) {
		$levelSousDossier = $level+1;
		echo str_repeat('&nbsp;&nbsp;',$levelSousDossier);
		?>
		<img src="images/icones/dossier.jpg"><a name="<?php echo $row['idDossier'];?>" href="mesdocuments.php?idDossier=<?php echo $row['idDossier'];?>">
		<?php 
		echo $row['nomDossier'].'<br>';
		
		display_children($row['idDossier'], $level+1); 
	}
	
}
1
Dédé86 Messages postés 682 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 14 mars 2017 208
15 mars 2009 à 17:42
Merci pour ta réponse.
Je vais me re-documenter correctement sur la récursion et refaire au "papier" l'algorithme. En fait, ce que je voudrais faire c'est utiliser le DOM pour pouvoir afficher l'arborescence des dossiers.
0