2016-08-15 21 views
1

Wenn ich den JSON unten hatte, wie würde ich den Wert Name und Age bekommen, wenn ID == 6?Wählen Sie aus JSON mit bestimmten Bedingungen

[{"Name":" Jim", "ID":"6", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}] 

Ich habe versucht, dies zu tun, so weit, aber ich erhalte den folgenden Fehler:

Notice: Trying to get property of non-object on line 3

$json = '[{"Name":" Jim", "ID":"6", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]'; 
$json2 = json_decode($json); 
if($json2->ID == '6') { 
    echo $json2->Name; 
    echo $json2->Age; 
} 
+0

Die einzige Sache, die Sie vermissen, ist eine foreach-Schleife, um alle Objekte zu durchlaufen, die Sie haben, bevor Sie versuchen, auf den Namen und das Alter von jedem von ihnen zuzugreifen. – Rizier123

Antwort

2

Mit einer einfachen Schleife:

$json = '[{"Name":" Jim", "ID":"6", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]'; 
$array = json_decode($json); 
foreach($array as $person){ 
    if($person->ID == '6') { 
     echo $person->Name; 
     echo $person->Age; 
    } 
} 

Wenn Sie mehr zugreifen müssen als eine Person in dem Array, könnte es sinnvoll sein, ein neues Array zu erstellen, das auf der ID indiziert ist:

$json = '[{"Name":" Jim", "ID":"6", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]'; 
$array = json_decode($json); 
$indexPeopleArray=[]; 
foreach($array as $person){ 
    $indexPeopleArray[$person->ID]=$person; 
} 

Dann können Sie jede Person einfach zugreifen:

echo $indexPeopleArray[6]->name; //jim 
echo $indexPeopleArray[53]->name; //bob 
+0

Danke Steve! :) –

1

Sie können es von

if($json2[0]->ID == '6') { 
    echo $json2[0]->Name; 
    echo $json2[0]->Age; 
} 

mit // weil in json [ das Array angibt. Also, wenn Sie es von json_decode dekodieren das Array erstellt wie.

array[0][Name] 
array[0][Age] 
array[0][Age] 

array[1][Name] 
array[1][Age] 
array[1][Age] 

Die Antwort von @steve ist auch das Richtige.

Verwandte Themen