variables de variables et $_SESSION

d0m
Mammouth du PHP | 1141 Messages

27 juil. 2007, 15:42

Bonjour,

je galère un peu avec les variables de variables.
J'essaie de mettre une arborescence dans la variable $_SESSION.
du genre dans $_SESSION['arbre'] :
array( 1 => array('titre'=>'titre1', 'sous_parties'=> array(
                                      1=>array('titre'=>'titre1_1',....)) ))
          
)
pour mettre mes élements je parcours donc les profondeurs de la variables $_SESSION pour mettre mon élement au bon endroit. Pour cela je fais :
tmp = '_SESSION[\'config_pdf\'][\'arbre\']';
for($i=0;$i<$profondeur;$i++){
  $tmp .= '['.$fils[$i].'][\'sous_parties\']';//fils est un tableau qui contient le "chemin" que l'on veut prendre dans l'arbre (suite des numero des fils)

//utilisation de variable de variable pour mettre l'élement à la bonne profondeur
${$tmp}[$numero]['titre'] = $_REQUEST['titre'];
${$tmp}[$numero]['sous_parties'] = array();
}
Malheureusement cela ne fonctionne pas...
Un peu d'aide serait la bienvenue

Mammouth du PHP | 19672 Messages

27 juil. 2007, 18:48

Je n'ai pas trop compris ce que tu voulais faire. Mais as-tu parcouru ceci ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5924 Messages

27 juil. 2007, 21:46

Au passage, il est impossible de stocker des tableaux dans les variables de session. Pour le faire, il faut les serialiser avant avec serialize() (et unserialize() pour désérialiser).

Mammouth du PHP | 19672 Messages

27 juil. 2007, 21:57

Au passage, il est impossible de stocker des tableaux dans les variables de session. Pour le faire, il faut les serialiser avant avec serialize() (et unserialize() pour désérialiser).
C'est nouveau ça :shock: C'est parfaitement possible au contraire, $_SESSION est du reste déjà un tableau. Rien n'interdit d'y ajouter des dimensions.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

d0m
Mammouth du PHP | 1141 Messages

28 juil. 2007, 15:59

Mais as-tu parcouru ceci ?
Mon problème ne vient pas des tableaux multidimensionnels, je les utilise tout le temps pour classer mes variables.
Et au passage c'est bien sûr parfaitement possible de mettre des tableaux multidimensionnels dans la variable $_SESSION.

Mon problème vient plutôt du stockage du "chemin" dans le tableau dans une chaine de caractère je m'explique mieux:

Pour les variables de variables, on procède comme ceci:
$var = 'bonjour';
$$var = 'le monde';
ensuite on peut utiliser la variable $bonjour avec comme nom de variable bonjour

ce que je voudrais c'est savoir si c'est possible pour un tableau de stocker le nom de la variable et de l'utiliser avec un $, dans l'esprit :
$var = '_SESSION[x][y][z]';
$$var = 'trop fort ca marche';
et ensuite d'y accéder comme ceci :
echo $_SESSION[x][y][z];

affiche : trop fort ca marche

Mammouth du PHP | 19672 Messages

28 juil. 2007, 16:05

Non, ça effectivement, ça risque fort de ne pas fonctionner. J'avoue que je m'interroge sur l'intérêt de cette tentative :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

d0m
Mammouth du PHP | 1141 Messages

28 juil. 2007, 18:05

J'avoue que je m'interroge sur l'intérêt de cette tentative :-k
pour placer un arbre dans la variable $_SESSION. Je vais tenter par des fonctions recursives alors.

Mammouth du PHP | 693 Messages

28 juil. 2007, 18:42

Utilise les références.

par exemple
<?php
session_start();
$_SESSION['a']['b']=array();
$racine=&$_SESSION['a']['b'];
$racine['c']='coucou';
print_r($_SESSION);
?>
donne

Code : Tout sélectionner

Array ( [a] => Array ( [b] => Array ( [c] => coucou ) ) )


Cependant, la seul facon d'accèder à la dimension inférieur est d'inclure une cle avec une référence du parent à chaque niveau.

d0m
Mammouth du PHP | 1141 Messages

30 juil. 2007, 09:30

Merci,
en associant le passage par réference du tableau $_SESSION et la récursivité j'ai pu remplir mon arbre. :D