Array d'objets d'array d'array d'objet ?!

Résolu/Fermé
Lya - 18 août 2011 à 16:28
Mihawk
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
- 24 août 2011 à 16:31
Bonjour,

Je me mélange les pinceaux entre les array et les objets...
Comment extraire de ce tableau la donnée "destinataire" ?

Array
(
    [signature] =>M2Mjc0NjgsXCJhcHBc
    [commande_details] => {"commande_id":112248545542195,"acheteur":14151819,"destinataire":1415181968,"montant":12,"objet":[{"item_id":"4","titre":"Parapluie","description":"Parapluie pour la pluie","prix":12,"data":"1350"}],"status":"ok"}
    [status] => ok
    [commande_id] => 789gft6541
    [methode] => paiement_update
)


Merci,

Lya


6 réponses

mpmp93
Messages postés
6651
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 323
18 août 2011 à 17:54
Bonjour,

L'item [commande_details] correspond à la sérialisation d'un tableau d'objets.

Pour désérialiser, il faut utiliser unserialze:
https://www.php.net/manual/fr/function.unserialize.php

sauf que pour désérialser un objet, c'est compliqué.

Voici une solution:

$commandeDetail = '{"commande_id":112248545542195,"acheteur":14151819,"destinataire":1415181968,"montant":12,"objet":[{"item_id":"4","titre":"Parapluie","description":"Parapluie pour la pluie","prix":12,"data":"1350"}],"status":"ok"}';

$search=array('{','"');
$replace=array('','', );

$xx = str_replace($search, $replace, $commandeDetail);

$yy = explode(',', $xx);

print_r($yy);


et qui affiche ceci:

Array
(
    [0] => commande_id:112248545542195
    [1] => acheteur:14151819
    [2] => destinataire:1415181968
    [3] => montant:12
    [4] => objet:[item_id:4
    [5] => titre:Parapluie
    [6] => description:Parapluie pour la pluie
    [7] => prix:12
    [8] => data:1350}]
    [9] => status:ok}
)


A partir de là on fait simplement ceci:

$destinataire = null;
foreach($yy AS $key => $val) {
    $zz = explode(':', $val);
    if($zz[0]=='destinataire') {
        $destinataire = $zz[1];
    }
}

echo "<b>".$destinataire."</b><br>";


à l'exécution on retrouve ceci pour $destinataire: 1415181968

A+
1
avion-f16
Messages postés
18841
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
16 août 2022
4 409
18 août 2011 à 17:25
Salut,

Essaie avec ceci :
$array['commande_details']->destinataire
0
Ahh une réponse!

J'ai tenté ceci mais cela ne marche pas. Merci quand même :)

J'ai également tenté de convertir le tout en tableau, ce qui fonctionne. Le gros problème est que cela me transforme mes données en exposant...
ex "destinataire":1415181968
me renvoie 1415181E14

Mal barrée...
0
Merci beaucoup pour cette solution, je n'y aurais pas pensé toute seule !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mihawk
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
842
24 août 2011 à 16:28
Sujet résolu ?
0
Ouep mais solution disparue ?
0
Mihawk
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
842
24 août 2011 à 16:31
Si tu parles de la désérialisation, elle est montée en premiere réponse :)
0