[PHP] Sortir un array d'une fonction récursive

Statut
N'est pas ouverte pour d'autres réponses.

_gilles

Elite
Bonjour à vous et merci de vous intéresser à mon problème :)

J'ai une arborescence de personnes dans une base de donnée. Il faut que je puisse lister dans un array les noms de tout les gens qui sont en dessous de moi. En principe c'est une sorte de pyramide de parrainage.


Code:
function arbo($var)
{ 
		$select = mysql_query("SELECT * FROM users WHERE ID_PARRAIN='$var'");
		while($ligne = mysql_fetch_array($select))
		{
			echo("• $ligne[NOM]<br>");
			arbo($ligne['ID']);
		}
}	   
			
arbo($_SESSION['ID']);

Ce code liste bien les noms mais le problème c'est que je ne sais rien en faire ! o_O

A part un écho, je ne sais pas insérer ca dans un array puisque quand je veux l'afficher par la suite, il me dit que la variable n'existe pas...

Ca fait des jours que je sèche dessus, votre aide est vraiment la bienvenue :pfiou:

Merci ! :-'
 

kokotchY

Elite
Tu transformes ta fonction pour renvoyer un tableau et ca ira tout seul :
Code:
function arbo($var)
{ 
		$select = mysql_query("SELECT * FROM users WHERE ID_PARRAIN='$var'");
                                $result = array();
		while($ligne = mysql_fetch_array($select  ))
		{
			$arbo = arbo($ligne['ID']);
			$result[] = array($ligne['NOM'] => $arbo);
		}
		return $result;
}
Tu auras alors un tableau de tableau de tableau de ...
Tu l'affiches récursivement.
 
1er
OP
_gilles

_gilles

Elite
Apparement le problème était de sortir la variable de la fonction. Il suffisait d'utiliser global pour la variable:

Code:
function arbo($var)
{ 
	$select = mysql_query("SELECT * FROM users WHERE ID_PARRAIN='$var'");
	while($ligne = mysql_fetch_array($select))
	{
		global $o;
		$o[] = $ligne['NOM'];
				 
		arbo($ligne['ID']);
	}
}	   
			
arbo($_SESSION['ID']);

Merci pour ton aide, ca m'a aiguillé tout de même :p

Bonne soirée à vous et merci d'avoir pris le temps de lire ma demande d'aide :love:
 

ozilrit

Elite
Cadeau Bonux : mieux gérer une hièrarchie dans un SGBDR.

Inutile pour Oracle & DB2, très (mais alors très) utile pour MySQL.
Ca te permet d'économiser un peu partout (une requête SQL, un traitement PHP) et c'est bien plus simple à maintenir.

Si tu veux des explications, demande. :)



Finis les exams, rien à faire...donc si ça peut aider :

  • Essaies d'exploiter la concaténation.
  • Modifie le * par le nom de chaque champs utile (même s'ils sont tous utiles). Le seul avantage de * est lors d'un COUNT() (pas uniquement mais..:)) avec certains SGBDR.
  • Utilise plutôt return.
  • Peut-être le sais-tu (ton premier message le sous-entend) : fais tous tes traitements avant d'afficher.
 

Calvin80

Respect is key
ozilrit a dit:
Le seul avantage de * est lors d'un COUNT() (pas uniquement mais..:)) avec certains SGBDR.
Ca c'est à prendre avec de TRES GRANDES pincettes !!
Ce n'est absolutment pas vrai tout le temps, le count (champ1, champ2,...) peut aussi être plus lent que le count * (ca é déjà été discuté sur gamerz).

Ceci dit, je préfère aussi énumérer mes champs ;)
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut