Qu'est-ce que je fais mal ici?

Quand je n'ai qu'un seul résultat qui revient, ce code fonctionne parfaitement

$someObject = json_decode($data);
$id=$someObject->clips[0]->id;

Mais quand je veux faire une boucle parce que je peux obtenir 10 résultats, ce code ne fonctionne pas, je suis sûr qu'il me manque quelque chose de très simple ici

$someObject = json_decode($data);
//var_dump($someObject);

foreach($someObject as $json){
   echo $json->clips[0]->id; 
}

EDIT: cette solution a fonctionné pour quiconque vient chercher

foreach ($someObject->clips as $clip){
   echo $clip->id. "<br>";
 }

Je ne sais pas comment l'autre répond au problème de boucle for que j'avais cependant.

1
Dynamite Media 20 avril 2017 à 08:22

3 réponses

Meilleure réponse

Change ça

foreach($someObject as $json){
  echo $json->clips[0]->id; 
}

À

$i=0;
foreach($someObject as $json){
   echo $json->clips[$i]->id; 
   $i++;
}

Ou comme miken32 indiqué dans le commentaire

foreach ($someObject->clips as $clip){
 echo $clip->id;
}
1
Afsar 20 avril 2017 à 05:24

Vous devez changer cet index [0] en index dynamique.

foreach($someObject as $k => $json){
   echo $json->clips[$k]->id;  // Insert $k here
}
2
Object Manipulator 20 avril 2017 à 05:27

Lisez cette référence: control-structures.foreach.php

Dans le tableau php si vous voulez obtenir tous les éléments, vous pouvez utiliser foreach

Imagerie vous avez cet exemple json:

{
  "clips": [{
          "id": 1,
          "name": "test",
          "tags": [
              "tag1",
              "tag2",
              "tag3"
          ]
      },
      {
          "id": 2,
          "name": "test2",
          "tags": [
              "tag4",
              "tag5",
              "tag6"
          ]
      }
  ]
}

Si vous souhaitez obtenir des clips et une liste de balises, vous pouvez utiliser ce code:

<?php
$jsonText = '{"clips": [{"id": 1,"name": "test","tags": ["tag1","tag2","tag3"]},{"id": 2,"name": "test2","tags": ["tag4","tag5","tag6"]}]}';

$jsonObj = json_decode($jsonText);

// in this loop you can get clipObject
foreach($jsonObj->clips as $clipObj){
    echo "clip id:" . $clipObj->id . "<br>\n";
    echo "clip name:" . $clipObj->name. "<br>\n";

    // in this loop you can get tags
    foreach($clipObj->tags as $tag){
        echo "clip tag:" . $tag. "<br>\n";
    }

}
1
Amir Mohsen 20 avril 2017 à 05:53