petit problème pour unserializer des données

Eléphanteau du PHP | 27 Messages

01 mars 2007, 23:54

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

02 mars 2007, 02:05

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mars 2007, 11:32

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 27 Messages

02 mars 2007, 12:49

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mars 2007, 13:01

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 :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 27 Messages

02 mars 2007, 13:17

ok, je comprend, je test ca merci (la seconde solution, car le "cc" est fixe, mais effectivemetn la clef change pour le pseudo)

merci