Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3363 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème de création de variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de création de variable

n°421087
monsieur t​omate
Posté le 08-06-2003 à 20:37:19  profilanswer
 

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
mood
Publicité
Posté le 08-06-2003 à 20:37:19  profilanswer
 

n°421216
belgique
Posté le 09-06-2003 à 01:09:36  profilanswer
 

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];
 
}
...

n°421218
monsieur t​omate
Posté le 09-06-2003 à 01:12:07  profilanswer
 

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
n°421229
belgique
Posté le 09-06-2003 à 01:29:58  profilanswer
 

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.

n°421368
monsieur t​omate
Posté le 09-06-2003 à 14:01:00  profilanswer
 

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
n°421507
docwario
Alea jacta est
Posté le 09-06-2003 à 15:44:52  profilanswer
 

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
n°421553
monsieur t​omate
Posté le 09-06-2003 à 16:46:05  profilanswer
 

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 :

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


---------------
HardGamers.org
n°421818
belgique
Posté le 09-06-2003 à 22:13:56  profilanswer
 

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

n°421827
skylight
Made in France.
Posté le 09-06-2003 à 22:20:29  profilanswer
 

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:

n°421836
monsieur t​omate
Posté le 09-06-2003 à 22:24:32  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème de création de variable

 

Sujets relatifs
Problème LicenceProblème de caratere ' dans un formulaire
[Flash] Envoyer un E-mail ? [problème résolu]Problème de tableau dynamique
[ACCESS] Problème de syntaxe d'une requête !probleme d'affichage tableau
Big problème[Apache2] Problème bizarre
[asp]Probleme d'update d'une table !!help[HTML/JS] probleme avec frame chez certain hebergeur
Plus de sujets relatifs à : Problème de création de variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR