2016-08-15 2 views
1

Если бы у меня был JSON ниже, как бы я получил значение Name и Age, когда ID == 6?Выберите из JSON с определенными условиями

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

Я попытался сделать это до сих пор, но я получаю следующее сообщение об ошибке:

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

Единственное, чего вам не хватает, это цикл foreach, чтобы перебрать все объекты, которые у вас есть, прежде чем пытаться получить доступ к имени и возрасту из каждого из них. – Rizier123

ответ

2

С помощью простого цикла:

$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; 
    } 
} 

Если у вас есть доступ к более чем один человек в массиве, может иметь смысл создать новый массив, индексированный по идентификатору:

$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; 
} 

Тогда вы можете получить доступ к каждому человеку просто:

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

Спасибо Стив! :) –

1

Вы можете получить его с помощью

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

// потому что в JSON [ указывает на массив. поэтому, когда вы декодируете его с помощью json_decode созданного массива.

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

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

Ответ @steve также является правильным.

Смежные вопросы