Page 1 sur 1

petit problème pour unserializer des données

Posté : 01 mars 2007, 23:54
par latitude
bonjour,

voilà, je récupère des données venant d'une bdd d'un forum pour un affichage, j'ai un champs d'option qui est "serializé" et visiblement il s'agit d'un imbriquement de 2 serie je vous donne l'exemple :

a:1:{s:2:"cc";a:1:{i:546;s:5:"Ben01";}}

je veux récupérer juste le BEN01 et j'arrive pas a manipuler la comment unserialize pour l'obtenir

si vous pouviez m'aider , merci

Posté : 02 mars 2007, 02:05
par Truc
Salut,
Montre nous ce que tu as essayé...
suffirait d'un unserialize() sur le champ récupéré de la BD :-k

Posté : 02 mars 2007, 11:32
par Ryle
Pareil que Truc... récupère la valeur dans ta base et colle là dans une variable php et passe là en paramètre à unserialize(). Fait un print_r() sur le résultat obtenu et tu verras la tête de ta variable déserialisée :)

'i' => int, 'a' => array, 's' => string. Pour ces deux derniers, la valeur qui suit est la taille. A vue de nez, tu devrais donc obtenir un truc comme ça :
a:1:{s:2:"cc";a:1:{i:546;s:5:"Ben01";}} 

Array ( 
   "cc" => Array (
      546 => "Ben01"
   )
)
Et donc pour récupérer la chaine, tu devrais juste avoir à parcourir le tableau en suivant les index :)

Posté : 02 mars 2007, 12:49
par latitude
oui, si j'applique unserialize() à mon champs de bdd j'ai bien ca ( exemple :Array ( [cc] => Array ( [603] => kumkat ) ) ), reste a parcourir l'index, ..mais faut qu'on m'aide, je comprend pas comment on fait (j'ai honte !)

merci

Posté : 02 mars 2007, 13:01
par Ryle
Pas de honte à avoir, c'est un forum pour apprendre :)

Tu as plusieurs solutions pour parcourir ton tableau. La plus simple, si tu connais tes index, c'est de les appeler directement :
// Array ( [cc] => Array ( [603] => kumkat ) ) )

echo $tableau['cc'][603]; // affiche : "kumkat"
Si tu ne les connais pas ou partiellement (si tu as toujours le cc, mais que tu ne connais pas le 603), il faut utiliser une boucle et parcourir le tableau pour récupérer les enregistrements un par un. Pour cela, il y a également plusieurs solutions, en voici une :
// pour chaque élément du tableau $tableau['cc']
foreach ($tableau['cc'] as $key => $val) { // on affecte l'index dans $key et la valeur dans $val
  // on va donc avoir $key==603 et $val=='kumkat'
  echo $val; // affiche donc : "kumkat"
}
Si jamais tu ne connais pas non plus l'index "cc", il suffit d'imbriquer tout cela dans un autre foreach :) (attention dans ce cas à changer les noms des variables $key et $val pour qu'elles ne soient pas écrasées quand tu rentres dans la seconde boucle :))

Posté : 02 mars 2007, 13:17
par latitude
ok, je comprend, je test ca merci (la seconde solution, car le "cc" est fixe, mais effectivemetn la clef change pour le pseudo)

merci