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

Résolu
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

  1. 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. Salut,

      Essaie avec ceci :
      $array['commande_details']->destinataire
      1. 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...
        1. Merci beaucoup pour cette solution, je n'y aurais pas pensé toute seule !
          1. Ouep mais solution disparue ?
            1. Contributeur
              Si tu parles de la désérialisation, elle est montée en premiere réponse :)