nom de variable reconstruit d'après chaine de caractere

sandrine2
Invité n'ayant pas de compte PHPfrance

03 sept. 2009, 14:41

Bonjour à tous,
Je viens solliciter votre aide avant de finir d'arracher les quelques cheveux qu'il me reste…
Alors, voilà :
D'un côté j'ai plusieurs tableaux multidimensionnels (nommés : $tabImgProjet001,$tabImgProjet002, $tabImgProjet003,etc.);
de l'autre côté j'ai une variable $numeroProjet qui reçoit comme valeur : "001" ou "002" ou "003", etc.
Je souhaite qu'en fonction de la valeur de la variable $numeroProjet, on aille chercher des infos dans l'un ou l'autre des tableaux.
Si la valeur de $numeroProjet est 001, on va chercher des infos dans le tableau nommé $tabImgProjet001, etc.
Pour ce faire je reconstruit le nom de mon tableau à partir de la variable $numeroProjet. Pour le moment, pas de problème.
Voici le code :
<?php
//mes tableaux (j'ai simplifié, il y en a plus et ils sont plus remplis)
    $tabImgProjet001[1]['imgUrl']="content/images/projet1/01.jpg";
    $tabImgProjet001[1]["imgLegende"]="ici ma legende 1";
    
    $tabImgProjet002[1]['imgUrl']="content/images/projet2/01.jpg";
    $tabImgProjet002[1]["imgLegende"]="ici ma legende 1";
        
//Je recupère le nom de variable du tableau tabImgProjet concerné en fonction du numeroProjet. Le nom du tableau est récupéré dans la variable $identifiant
    $prefixe="tabImgProjet";
    $suffixe=$_SESSION['numeroProjet'];
    $complet=$prefixe.$suffixe;
    $identifiant=${$complet};
    echo $identifiant;
    echo $identifiant[1]["imgLegende"];
?>
Quand la valeur de $numeroProjet est 001, le premier echo me renvoie : array, le second me renvoie "ici ma légende 1". Donc ça marche bien.

Oui mais voilà, à présent je voudrais que tous mes tableaux soient des variables de session (accessibles dans tout le site donc). Je transforme le code ainsi :
<?php
    $_SESSION['tabImgProjet001'][1]['imgUrl']="content/images/projet1/01.jpg";
    $_SESSION['tabImgProjet001'][1]["imgLegende"]="ici ma legende 1";

    $_SESSION['tabImgProjet002'][1]['imgUrl']="content/images/projet2/01.jpg";
    $_SESSION['tabImgProjet002'][1]["imgLegende"]="ici ma legende 1";
   
$avant=""_SESSION[';
$prefixe="tabImgProjet";
    $suffixe=$_SESSION['numeroProjet'];
    $fin="']";
    $complet=$avant.$prefixe.$suffixe.$fin;
    $identifiant=${$complet};
    echo $identifiant;
    echo $complet;
?>
"echo $complet" me renvoie _SESSION['tabImgProjet001'], il reconstitue donc bien le nom de la variable.
Mais "echo $identifiant" ne renvoie rien. Apparemment la chaine n'est pas retranscrite en variable.

Avez-vous une idée d'où vient le problème ? Pourquoi ça marche dans un cas et pas dans l'autre ?

Merci par avance pour votre aide,

Sandrine

PS: desolée, la lecture n'est pas facilitée, j'ai eu beau appuyer sur le btn php et lire la faq en tous sens je n'ai pas réussi à formater le code. Si quelqu'un a une solution à ça aussi ? Merci

Mammouth du PHP | 568 Messages

03 sept. 2009, 15:00

essaye avec un truc du genre

${'_SESSION['tabImgProjet001']'} et si ça marche, t'a plus qu'a adapter.

Et regarde par la http://www.lephpfacile.com/cours/26-les ... dynamiques

Eléphant du PHP | 369 Messages

03 sept. 2009, 16:48

Salut toute seule,
Bonjour à tous,
Je viens solliciter votre aide avant de finir d'arracher les quelques cheveux qu'il me reste…
Alors, voilà :
D'un côté j'ai plusieurs tableaux multidimensionnels (nommés : $tabImgProjet001,$tabImgProjet002,
[...]
Avez-vous une idée d'où vient le problème ? Pourquoi ça marche dans un cas et pas dans l'autre ?
Merci par avance pour votre aide,
Sandrine
PS: desolée, la lecture n'est pas facilitée, j'ai eu beau appuyer sur le btn php et lire la faq en
tous sens je n'ai pas réussi à formater le code. Si quelqu'un a une solution à ça aussi ? Merci
En complément du post de Yosh.

Je ne sais si ca peut t'aider ni même si c'est ce que tu recherches mais,
au cas ou, voici deux petits exemples rapide de ce qu'il est possible de faire.
<?php
    
   $a = "exemple";
   $exemple = "other";
   $other = "last";

   echo "1 ".$a."<br>";
   echo "2 ".${a}."<br>";
   echo "3 ".${$a}."<br>";
   echo "4 ".${${$a}}."<br>";

   echo "<br><br>";

   echo "1 ".$a."<br>";
   echo "2 ".${a}."<br>";
   echo "3 ".${exemple}."<br>";
   echo "4 ".${other}."<br>";    

   echo "<br><br>";
           
   echo "1 ".${other}."<br>";    

   echo "<br><br>";

   echo "1 ".${${exemple}}."<br>";
   
   echo "<br>------------------------------------------------------<br>";
    
   $a       = "exemple";
   $exemple = "other";
   $other   = "last";

   $array = "";

   $a1 = $a;
   $a2 = ${$a};
   $a3 = ${${$a}};

   $array[$a1] = 1;
   $array[$a2] = 1;
   $array[$a3] = 1;

   echo "<br><br>";

   $a1 = ${exemple};
   $a2 = ${other};    
   $array[$a1] = 2;
   $array[$a2] = 2;

   echo "<br><br>";
           
   $a1 = ${other};    
   $array[$a1] = 1;

   print_r($array);

?>
...et pas taper si je suis à côté, @+ bon code ;)

Eléphanteau du PHP | 27 Messages

03 sept. 2009, 16:55

Et pourquoi pas tout simplement:
$_SESSION[$prefixe.$suffixe][1]['imgLegende']
EDIT:
Dans ton premier cas tu reconstruis le nom d'une variable.
En utilisant les sessions, tu ne reconstruis pas le nom d'une variable mais la clé d'un tableau.
Les $$ deviennent donc inutiles.

Mammouth du PHP | 985 Messages

03 sept. 2009, 17:06

<?php
   echo "1 ".$a."<br>";
// ...
?>
[Mode Taquin: ON]
Sert a rien de sortir les variables si tu utilises des ". :mrgreen:
[Mode Taquin: OFF]
Désolé je sors -> :-#
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

sandrine2
Invité n'ayant pas de compte PHPfrance

04 sept. 2009, 16:59

Merci à tous pour vos réponses.
Et plus spécialement à Babounet…
Et pourquoi pas tout simplement:
$_SESSION[$prefixe.$suffixe][1]['imgLegende']
EDIT:
Dans ton premier cas tu reconstruis le nom d'une variable.
En utilisant les sessions, tu ne reconstruis pas le nom d'une variable mais la clé d'un tableau.
Les $$ deviennent donc inutiles.

Et oui, tout simplement :)
Mais pourquoi faire simple quand on peut faire compliqué ?
Ça marche nikel.
Merci