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


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

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

Message le Jeu Sep 15, 2005 8:03

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
Dernière édition par chava2b le Jeu Sep 15, 2005 12:52, édité 1 fois.

Tex
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

Message le Jeu Sep 15, 2005 9:25

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


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Jeu Sep 15, 2005 9:55

Code: Tout sélectionner
<?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);
?>


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Jeu Sep 15, 2005 9:58

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


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Sep 15, 2005 10:30

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


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Jeu Sep 15, 2005 10:32

De rien !
Alors mon compte paypal, c'est le ******* ;)


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Sep 15, 2005 10:52

... 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


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Jeu Sep 15, 2005 11:06

:) c'est de bonne guerre !


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Sep 15, 2005 12:33

Au fait, t'as fait ca en combien de temps ?


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité