[résolu]prog php... ptit conseil

WRInaute occasionnel
Hello,

prise de tete depuis hier, cette nuit... et le mal de crane depuis ce matin...rrr!!!!
Si qqun a 5mn pour me donner un conseil, je suis preneur

Bref, un petit script à faire, un truc deja fait sur les forums par ex. donc qui doit etre refaisable
Donc, soit il me manque un parametre dans ma table pour que ce soit vraiment plus simple, soit j'ai mes petits neurones qui ont besoin de vacances!

Je mets 1 lien vers 1 image pour mieux comprendre

J'ai une table avec un champs id, sujet et parent
le champ parent a la valeur de l'id du message auquel il se rattache

Je dois faire le script pour afficher le champs sujet avec les images devant afin de recreer la hierarchie

Pour le moment j'ai un scritp qui est plus une usine a gaz qu'autre chose... mais je continu dessus, peut etre j'arriverai à simplifier plus tard.

La prise de tete c'est pour mettre les bonnes images (les petit .gif) pour la hierarchie

Une idée ?

Merci
 
WRInaute occasionnel
il te faut faire une fonction qui s'appelle elle meme en fin de fonction lorsque il apparait que l'element traité a un fils, a ce moment là, avant d'appeller la fonction, tu sais qu'il faut metre un "+" avant de continuer.

attention aux boucles infinies :)
 
WRInaute occasionnel
Code:
<?php
$arrp = array();
$arrl = array();

$res = mysql_query('select * from table order by parent, id');
while (($rec = mysql_fetch_array($res)) !== false)
{
	if (!isset($arrp[$rec['parent']]))
		$arrp[$rec['parent']] = array();
	$arrp[$rec['parent']][] = $rec['id'];
	$arrl[$rec['id']] = $rec['sujet'];
}


// fonction appel recursif
function dsp_leaf($a, $l, $i, $stri, $islast)
{
	// Affiche le noeud $i
	if (isset($l[$i]))
	{
		for ($d = 0; $d < strlen($stri); $d++)
			print(($stri[$d] == '1') ? '<img src="i.gif"/>' : '<img src="blank.gif"/>');
		if ($islast)
			print('<img src="L.gif"/>');
		else
			print('<img src="t.gif"/>');
		if (isset($a[$i]))
			print('<img src="m.gif"/>');
		else
			print('<img src="c.gif"/>');
		print($l[$i].'<br/>'); // sujet
	}
	else
		print('<img src="m.gif"/></br>');	// noeud racine (id 0)

	// Boucle récursive sur les enfants
	if (isset($a[$i]))
	{
		$curr = 1;
		$cnt = sizeof($a[$i]);
		$str = $stri;
		if ($i)
		{
			if ($islast)
				$str .= '0';
			else
				$str .= '1';
		}
		foreach($a[$i] as $val)
		{
			dsp_leaf($a, $l, $val, $str, ($curr == $cnt));
			$curr++;
		}
	}
}

// appel initial de la fonction recursive sur l'id 0
dsp_leaf($arrp, $arrl, 0, '', false);
?>
 
WRInaute occasionnel
Le truc, c'est de construire une chaîne $str qui va contenir une séquence de 0 et de 1 correspondant aux endroits où il faut afficher un carré blanc (0) ou un pipe (1).
Dans le code donné, il y a un niveau en trop par rapport à ton besoin, c'est un "+" à la racine (et donc une colonne de plus tout du long).
 
WRInaute occasionnel
Blini, je ne sais pas que dire!!! Je cherchais un conseil, une piste... mais la tu me donne une solution propre qui fonctionne !!!

Donc, chapeau bas!

(je prefere meme pas te montrer mon code, une trentaine de test, des trucs tordus...)

Me reste plus qu'a comprendre ca que tu as fais, histoire d'etre un peu moins bete ce soir ;)

Merci
 
WRInaute occasionnel
... je me demande si ca ne t'as pas amusé de le faire... surement que tu t'embetais, tu cherchais un truc a faire...

Et la, coup de chance, un gars (moi) te propose une occupation!
Coup de bol, vraiment! (je t'assure!)

Et en plus, quelle occupation! un truc qui te plais!

bref, cette super idée (la mienne) que JE t'ai donné aurait dû avoir un coût (droits d'auteur et conneries), mais bon pour cette fois, ca ira...

;)

Merci
 
Discussions similaires
Haut