Problème variable dynamique et tableau

Problème variable dynamique et tableau - PHP - Programmation

Marsh Posté le 01-07-2005 à 14:31:07    

Hello !
J'ai un problème pour définir un index de tableau avec une variable dynamique.
 
Par exemple, je construis la variable  

Code :
  1. $machin = "[2][3]";
  2. $table{$machin} = "salut les gens !"


 
Si je fais un var_dump de ce tableau par la suite, je vais voir que  [[2][3]] est l'index de l'élément "Salut les gens". C'est assez étrange, il intégre lui même des nouveaux crochets. Est ce qu'il y à un moyen de ne pas intégrer ces nouveaux crochets, c'est à dire substituer la variable $machin par le contenu exacte de la chaine, de façon à avoir le bon index.
 
Je pense que c'est surement une question de variable dynamique, mais j'ai fait pas mal d'essais, et à chaque fois les index sont mauvais... Voilà, si quelqu'un à la solution, merci d'avance !

Reply

Marsh Posté le 01-07-2005 à 14:31:07   

Reply

Marsh Posté le 01-07-2005 à 14:58:48    

C'est peut-être faisable mais ça me semble particulièrement crade. Quel intérêt de faire ça plutôt qu'un truc comme ça :
 

Code :
  1. $indice1 = 2;
  2. $indice2 = 3;
  3. $table[$indice1][$indice2] = "salut les gens !";


 
?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-07-2005 à 15:00:34    

Bon sinon tu peux sûrement faire ça :
 

Code :
  1. $machin = "[2][3]";
  2. eval('$table'.$machin.' = "salut les gens !";');


 
Mais voilà, c'est moche.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-07-2005 à 15:03:08    

C'est crade parce que ça sort du contexte. En vrai le corps que j'ai donné est dans une fonction récursive, et le nombre de crochets dépend du nombre de récursivités. D'où l'utilisation de variables dynamiques. Voilà le vrai code, c'est peut-être plus parlant
 

Code :
  1. function recurs($category)
  2. {
  3.     global $var;
  4.     global $table;
  5.     $parentCategory = $category->getParentCategory();
  6.     if ( $parentCategory )
  7.     {
  8.      
  9.       recurs($parentCategory);
  10.     }
  11.     $var .= "[" .$category->getID(). "]";
  12.     $table{$var} = $category;
  13. }


 
Voilà voilà !

Reply

Marsh Posté le 01-07-2005 à 15:03:39    

sielfried a écrit :

Bon sinon tu peux sûrement faire ça :
 

Code :
  1. $machin = "[2][3]";
  2. eval('$table'.$machin.' = "salut les gens !";');


 
Mais voilà, c'est moche.


 
Ok, je vais essayer ça, merci.

Reply

Marsh Posté le 01-07-2005 à 15:12:48    

Ca marchote ce que tu m'as donné, mais bizarrement le contenu du tableau est bien bizarre... Le problème c'est que si je passe un objet au lieu d'une chaine, il me dit : "Warning: Cannot use a scalar value as an array in c:\...) : eval()'d code on line 1.
 
Tu crois que le secret c'est d'utiliser la fonction eval ?

Reply

Marsh Posté le 01-07-2005 à 15:21:13    

burtonien a écrit :

Ca marchote ce que tu m'as donné, mais bizarrement le contenu du tableau est bien bizarre... Le problème c'est que si je passe un objet au lieu d'une chaine, il me dit : "Warning: Cannot use a scalar value as an array in c:\...) : eval()'d code on line 1.
 
Tu crois que le secret c'est d'utiliser la fonction eval ?


 
J'ai pas bien compris. T'as un exemple qui te sort ce warning ?
 
Sinon oui, je dirais qu'eval est a priori adapté, en admettant qu'il n'y ait aucune solution sans, ce que je n'ai pas vérifié. ;)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-07-2005 à 15:31:00    

En fait si je fais ça :
 

Code :
  1. function recurs($category)
  2. {
  3.     global $var;
  4.     global $table;
  5.     $parentCategory = $category->getParentCategory();
  6.     if ( $parentCategory )
  7.     {
  8.       recurs($parentCategory);
  9.     }
  10.  
  11.     $var .= "[" .$category->getID(). "]";
  12.     eval('$table'.$var.' = $category;');
  13.    
  14. }


 
Il me sort : Warning: Cannot use a scalar value as an array in c:\... : eval()'d code on line 1
 
Encore plus fou, si je fais :

Code :
  1. eval('$table'.$var.' = "PHP c\'est fantastique;');

à la place de

Code :
  1. eval('$table'.$var.' = $category;');

(j'ai juste remplacé l'objet par une chaîne) et quand je fais un var_dump($table) à la fin de la récursion, il me sort :  
Array ( [8] => LL PHP c'est fantastique [4] => Le PHP L'est fantastique )  :lol:


Message édité par burtonien le 01-07-2005 à 15:31:51
Reply

Marsh Posté le 01-07-2005 à 15:36:11    

Merde je crois que je viens de comprendre le warning... En fait, je lui donne un objet, alors que lui il veut un tableau. Arh... C'est logique en même temps qu'il m'envoye chier.

Reply

Marsh Posté le 01-07-2005 à 15:37:42    

Fous ce que tu mets dans le eval dans une variable que tu echo avant de l'appeler.
 
Tu verras bien mieux je pense...


Message édité par sielfried le 01-07-2005 à 15:38:47

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-07-2005 à 15:37:42   

Reply

Marsh Posté le 01-07-2005 à 15:44:33    

Apparemment c'est bon :  

Code :
  1. eval('$table'.$var.' = array('.$category->getID().' => $category);');


 
Je sais pas si c'est la solution ultime, mais merci de ton aide !

Reply

Sujets relatifs:

Leave a Replay

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