Problème de création de variable

Problème de création de variable - PHP - Programmation

Marsh Posté le 08-06-2003 à 20:37:19    

Salut,
 
j'ai un pt pb avec des arrays :
j'extrais d'une table mysql des données de la forme "1-1-2", ou encore "1-3-4-5", (plusieurs chiffres reliés par un tiret, koi). j'aimerais que dans une boucle fetch_array je puisse convertir ces codages en un array unique de la forme $case[1][1][2] (pour le premier exemple évidemment). J'ai pensé le faire avec des variables dynamiques :
 

Code :
  1. while ($data = mysql_fetch_array($req)) {
  2.   $temp = str_replace('-', '][', $data[hierarchie]);
  3.   ${'case['.$temp.']'} = $data[texte];
  4. }


 
(hierarchie correspond à la chaine à convertir)
 
mais apres exécution, impossible de récupérer ces infos (avec un petit echo $case[1][1][2]), qui ne sont, de toute façon, pas considérées comme des arrays (j'ai vérifié avec un get_defined_vars qui affiche toutes les valeurs de case au cas par cas, au lieu de les regrouper dans un array)...
 
comment pourrais-je faire ? :??:


---------------
HardGamers.org
Reply

Marsh Posté le 08-06-2003 à 20:37:19   

Reply

Marsh Posté le 09-06-2003 à 01:09:36    

moi je ferais (si tu connais la profondeur max de ta hierarchie...
(code canevas) :p
[cpp]
$temp=explode('-',$data[hierarchie ])
$nombre=arraylength($temp)
if($nombre==1)
{
$case[$temp[0]]=$data[texte];
}
if($nombre==2)
{
$case[$temp[0]][$temp[1] ]=$data[texte];
 
}
...

Reply

Marsh Posté le 09-06-2003 à 01:12:07    

ben je la connais pas... mais si g pas le choix, j'peux définir une longueur max (ouch elle riske d'etre élevée)


---------------
HardGamers.org
Reply

Marsh Posté le 09-06-2003 à 01:29:58    

En fait ton problème vient peut être du fait que la génération de nom de variables ne gére que le nom et non les indices.. Faudrait aller voir dans la doc.

Reply

Marsh Posté le 09-06-2003 à 14:01:00    

dans la doc y'a marké :
Afin de pouvoir utiliser les variables dynamiques avec les tableaux, vous avez à résoudre un problème ambigu. Si vous écrivez $$a[1], le parseur a besoin de savoir si vous parler de la variable qui a pour nom $a[1] ou bien si vous voulez l'index [1] de la variable $$a. La syntaxe pour résoudre cette ambiguïté est la suivante: ${$a[1]} pour le premier cas, et ${$a}[1] pour le deuxième.  
 
mon exemple est censé s'en rapprocher non ? et pourtant, ça marche pas :(


---------------
HardGamers.org
Reply

Marsh Posté le 09-06-2003 à 15:44:52    

perso, je pense que ca fnctionne :
 

Code :
  1. $tab = array();
  2. while ($data = mysql_fetch_array($req)) {
  3. $temp = explode('-',$data['hierarchie']); 
  4. $pointeur = &$tab;
  5. for($i=0;$i<count($temp);$i++)
  6. {
  7.   $pointeur = &$pointeur[$temp[$i]];
  8. }
  9. $pointeur = $data[texte];
  10. }


 
confirme si ca fonctionne...


Message édité par docwario le 09-06-2003 à 15:47:26
Reply

Marsh Posté le 09-06-2003 à 16:46:05    

ton truc buggait alors g essayé avec eval, et ça marche !!  :pt1cable: en fait, le gros pb principal venait du fait kon ne peut pas définir un tableau de la forme :
$case[1] = 'truc';
$case{1][1] = 'machin';
 
il faut faire :
$case[1][0] = 'truc';
$case[1][1] = 'machin';
 
pr info, voilà la source :

Reply

Marsh Posté le 09-06-2003 à 22:13:56    

Tout ce qu'on peut pas voir quand même  :(

Reply

Marsh Posté le 09-06-2003 à 22:20:29    

Code :
  1. $req = mysql_query("SELECT * FROM jeu_redac2 ORDER BY hierarchie DESC" );
  2. $tableau = mysql_query("SELECT hierarchie FROM jeu_redac2 ORDER  BY length(hierarchie) DESC LIMIT 1" );
  3. list($maxi) = mysql_fetch_row($tableau);
  4. $maxi = str_replace('-', '', $maxi);
  5. $maxi = strlen($maxi);
  6. $case = array();
  7. while ($data = mysql_fetch_array($req)) {
  8.   $temp=explode('-',$data[hierarchie]);
  9.   $php_deb = '$case';
  10.   $php_fin = ' = "'.addslashes($data[texte]).'";';
  11.   $php_mil = '';
  12.   for ($i = 0; $i < count($temp); $i++) {
  13.     $php_mil .= '['.$temp[$i].']';
  14.   }
  15.   for ($i = count($temp); $i < $maxi; $i++) {
  16.     $php_mil .= '[0]';
  17.   }
  18.   eval("$php_deb$php_mil$php_fin" );
  19. }
DocWario a écrit :

perso, je pense que ca fnctionne :
 

Code :
  1. $tab = array();
  2. while ($data = mysql_fetch_array($req)) {
  3. $temp = explode('-',$data['hierarchie']); 
  4. $pointeur = &$tab;
  5. for($i=0;$i<count($temp);$i++)
  6. {
  7.   $pointeur = &$pointeur[$temp[$i]];
  8. }
  9. $pointeur = $data[texte];
  10. }


 
confirme si ca fonctionne...


les pointeurs et adressages ca marche en php maintenant :??: :heink:

Reply

Marsh Posté le 09-06-2003 à 22:24:32    

ben non, ca part en couille :( mais c pas grave, g réussi à attaquer le pb par un autre coté


---------------
HardGamers.org
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed