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

Discussion dans 'Web, design' créé par _gilles, 30 Août 2007.

Statut de la discussion:
Fermée.
  1. Offline
    _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 ! :-'
    _gilles, 30 Août 2007
    #1
  2. Offline
    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.
    kokotchY, 30 Août 2007
    #2
  3. Offline
    _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:
    _gilles, 30 Août 2007
    #3
  4. Offline
    ozilrit Touriste
    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.
    ozilrit, 30 Août 2007
    #4
  5. Offline
    Calvin80 Elite
    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 ;)
    Calvin80, 4 Septembre 2007
    #5
  6. Offline
    ozilrit Touriste
    C'est bien ce que je dis. o_O
    ozilrit, 10 Septembre 2007
    #6
Statut de la discussion:
Fermée.