2017-07-09 1 views
1

Je travaille avec l'API Veezi et cela est une partie de leur JSON:Comment sortir Veezi JSON subarray?

[{ 
    "Id":"ST00000032", 
    "Title":"Avatar", 
    "People":[ 
     { 
      "Id":"0000000032", 
      "FirstName":"Sam", 
      "LastName":"Worthington", 
      "Role":"Actor" 
     }, 
     { 
      "Id":"HO00000176", 
      "FirstName":"James", 
      "LastName":"Cameron", 
      "Role":"Director" 
     }, 
     { 
      "Id":"HO00000578", 
      "FirstName":"Sigourney", 
      "LastName":"Weaver", 
      "Role":"Actor" 
     } 
    ], 
    "AudioLanguage":"English" 
}] 

Je construis une chaîne en PHP et jusqu'à présent (où $theArray est mon tableau décodée JSON, c'est le code J'ai.

$allShows .= '<p class="details">With: '; 
foreach($theArray['People'] as $key => $value){ 
    $allShows .= $value->FirstName.' '.$value->LastName.' ('.$value->Role.') <br>'; 
} 
$allShows .= '</p>'; 

Je ne reçois pas des valeurs, seulement les parenthèses de intégrés autour de « rôle » Le nombre exact de parenthèses sont retournés, donc je suis assez sûr que je suis en boucle correctement quelqu'un peut-il. repérer mon problème?

+0

ce qui est 'print_r ($ theArray) 'ressemble à, il semble que vous ayez un tableau d'objets, alors json_decode vous donnera un tableau de tableaux, votre besoin de deux foreach ou si vous voulez seulement le premier' foreach ($ theArray [0] ['People'] comme ...) '. –

+0

Si vous avez décodé la chaîne JSON dans un tableau au lieu d'un objet, tous les objets JSON imbriqués seront également des tableaux. Dans ce cas, vous devriez utiliser '$ value ['FirstName']' au lieu de '$ value-> FirstName'. – rickdenhaan

Répondre

0

Vous pouvez pro arrête toute la chaîne json sous forme de tableau. Si vous décommentez mon appel var_export(), vous pouvez voir que le tableau commence par un élément indexé zéro.

code: (Demo)

$json='[ 
{ 
    "Id":"ST00000032", 
    "Title":"Avatar", 
    "People":[ 
     { 
      "Id":"0000000032", 
      "FirstName":"Sam", 
      "LastName":"Worthington", 
      "Role":"Actor" 
     }, 
     { 
      "Id":"HO00000176", 
      "FirstName":"James", 
      "LastName":"Cameron", 
      "Role":"Director" 
     }, 
     { 
      "Id":"HO00000578", 
      "FirstName":"Sigourney", 
      "LastName":"Weaver", 
      "Role":"Actor" 
     } 
    ], 
    "AudioLanguage":"English" } 
]'; 

//var_export(json_decode($json,true)); 

$allShows='<p class="details">With: '; 
foreach(json_decode($json,true)[0]['People'] as $value){ 
    $allShows.="{$value['FirstName']} {$value['LastName']} ({$value['Role']})<br>"; 
} 
$allShows.='</p>'; 
echo $allShows; 

Sortie:

<p class="details">With: Sam Worthington (Actor)<br>James Cameron (Director)<br>Sigourney Weaver (Actor)<br></p> 

Alternativement, si vous voulez travailler avec un tableau d'objets, vous pouvez utiliser ceci:

$allShows='<p class="details">With: '; 
foreach(json_decode($json)[0]->People as $value){ 
    $allShows.="{$value->FirstName} {$value->LastName} ({$value->Role})<br>"; 
} 
$allShows.='</p>'; 
echo $allShows; // same result 

Si c'était mon projet, je ne voudrais pas que la dernière balise <br> avant </p>, donc j'utiliser quelque chose comme ceci:

foreach(json_decode($json)[0]->People as $value){ 
    $set[]="{$value->FirstName} {$value->LastName} ({$value->Role})"; 
} 
echo '<p class="details">With: ',implode('<br>',$set),'</p>'; 

Sortie:

<p class="details">With: Sam Worthington (Actor)<br>James Cameron (Director)<br>Sigourney Weaver (Actor)</p> 
+0

Merci Mick, fonctionne parfaitement! –