2016-04-03 8 views
1

Ich versuche, diesen JSON-StringParsing einen JSON-String mit mehreren Arrays

$json = {"fields":{ 
"relationshipStatus":[{"fieldId":4,"name":"Committed"},{"fieldId":2,"name":"Dating"},{"fieldId":6,"name":"Engaged"},{"fieldId":3,"name":"Exclusive"},{"fieldId":7,"name":"Married"},{"fieldId":8,"name":"Open Relationship"},{"fieldId":5,"name":"Partnered"},{"fieldId":1,"name":"Single"}], 
      "ethnicity":[{"fieldId":1,"name":"Asian"},{"fieldId":2,"name":"Black"},{"fieldId":3,"name":"Latino"},{"fieldId":4,"name":"Middle Eastern"},{"fieldId":5,"name":"Mixed"},{"fieldId":6,"name":"Native American"},{"fieldId":8,"name":"Other"},{"fieldId":9,"name":"South Asian"},{"fieldId":7,"name":"White"}], 
}} 

Mit dieser foreach-Schleife zu analysieren, schließlich mag ich die Daten zu übernehmen können und sie als Select/List-Dropdown-Listen auf einem bilden.

foreach($json['fields'] as $item){ 
    foreach($item['relationshipStatus'] as $relationship){ 
     echo $relationship['name'] . " " . $relationship['fieldId'] . "<br/>"; 
    } 

    foreach($item['ethnicity'] as $ethnicity){ 
     echo $ethnicity['name'] . " " . $ethnicity['fieldId'] . "<br/>"; 
    } 
} 

Egal, wie ich versuche, um die Daten zu ziehen, halte ich Fehler immer ähnlich ist:

Notice: Undefined index: relationshipStatus in /Applications/MAMP/htdocs/updateprofile.php auf Linie 126 Warnung: Invalid argument für foreach geliefert() in /Applications/MAMP/htdocs/updateprofile.php on line 126

Was mache ich falsch?

+0

Wenn Sie pretty- print the json (dh mit jsonlint.com) Sie sehen, dass das Array tatsächlich unter $ json ['fields'] ['relationshipStatus'] ', und nicht direkt unter' $ json ['fields'] 'wie in dein Code. – JimL

+0

Sie sind absolut richtig. –

Antwort

1

Die erste foreach wählt bereits relationshipStatus und ethnicity. Vielleicht zeigen die folgenden Änderungen, was ich meine:

foreach($json['fields'] as $key=>$item){ 
if ($key == 'relationshipStatus') 
foreach($item as $relationship){ 
    echo $relationship['name'] . " " . $relationship['fieldId'] . "<br/>"; 
} 
else if ($key == 'ethnicity') 
foreach($item as $ethnicity){ 
    echo $ethnicity['name'] . " " . $ethnicity['fieldId'] . "<br/>"; 
} 
} 
0

Hier legen Sie die JSON Object in einer falschen way.The Feldwerte iterieren Sie holen wollen, ist eigentlich unter $json['fields']['relationshipStatus'].

var name = $json['fields']['relationshipStatus']['name']; 
var fieldId = $json['fields']['relationshipStatus']['fieldId']; 

=============================== OR =========== =============================

Wie der A.fink

beschrieben
foreach($json['fields'] as $key=>$item){ 
if ($key == 'relationshipStatus') 
foreach($item as $relationship){ 
    echo $relationship['name'] . " " . $relationship['fieldId'] . "<br/>"; 
} 
else if ($key == 'ethnicity') 
foreach($item as $ethnicity){ 
    echo $ethnicity['name'] . " " . $ethnicity['fieldId'] . "<br/>"; 
} 
} 
Verwandte Themen