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

Résolu
Lya -  
Mihawk Messages postés 4753 Statut Contributeur -
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. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
     
    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
  2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Salut,

    Essaie avec ceci :
    $array['commande_details']->destinataire
    0
  3. Lya
     
    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
  4. Lya
     
    Merci beaucoup pour cette solution, je n'y aurais pas pensé toute seule !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mihawk Messages postés 4753 Statut Contributeur 846
     
    Sujet résolu ?
    0
  7. Lya
     
    Ouep mais solution disparue ?
    0
    1. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Si tu parles de la désérialisation, elle est montée en premiere réponse :)
      0