2016-08-15 43 views
1

如果我有下面的JSON,当ID == 6时,如何得到NameAge的值?从特定条件中选择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; 
    } 
} 

如果您需要访问更多比阵列中的一个人,创建一个索引在ID上的新数组可能是有意义的:

$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的答案也是正确的。