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. 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. 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. 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 :)