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

          Essaie avec ceci :
          $array['commande_details']->destinataire