我正在使用PHP和json_decode来使用远程API,而我遇到了一个新手问题,我甚至不知道该搜索什么来找到我的答案。
所以在我的脚本上我有一个$ code = 392和一个简化版本的json文件:
{
"result": {
"items": [
{
"name": "New York",
"code": 7294,
},
{
"name": "Miami",
"code": 392,
},
{
"name": "Los Angeles",
"code": 9182,
}
]
}
}
所以,简单地说,拥有代码392我想知道哪个名称对应于该代码。怎么样 ? (实际的json结果有数千个“项目”,如果这有所不同)
答案 0 :(得分:1)
首先,您应该解码您的json数据,如:
// will decode json data as assoc array
$data = json_decode($json_data, true);
然后,您可以在此数组中获取值,如:
$item01 = $data['result']['items'][0];
$name = $item01['name']; // New York
$code = $item01['code']; // 7294
或者
// will decode json data as object
$data = json_decode($json_data);
$item01 = $data->result->items[0];
$name = $item01->name; // New York
$code = $item01->code; // 7294
答案 1 :(得分:0)
您可以遍历JSON对象的items
中的result
,并检查与所需代码和每个项目代码的相等性。以下是将其实现为函数的方法。
function getNameFromCode($json, $code) {
foreach ($json['result']['items'] as $item)
if ($item['code'] == $code)
return $item['name'];
// return false if the code wasn't found.
return false;
}
// assume this is the JSON string of your example.
$json_string = "...";
// pass true as the second argument to get an associative array.
$json = json_decode($json_string, true);
// should return "Los Angeles".
$name = getNameFromCode($json, 9182);
foreach()
上的文件。
答案 2 :(得分:0)
foreach( json_decode($my_json_string) as $key => $item)
if ( $item['code'] === $code ) { $name = $item[name]; break; }
答案 3 :(得分:0)
您可以将JSON
转换为PHP对象,并使用foreach
循环遍历项目。
function getNameByCode($phpobj, $code){
if( isset($phpobj->result) ){
if( isset($phpobj->result->items)
&& is_array($phpobj->result->items) ){
foreach($phpobj->result->items as $item){
if( $item->code == $code ){
return $item->name;
}
}
}
}
return false;
}//end function
您可以使用此功能进行测试... 注意:删除尾随逗号,如评论 rjdown 所示
$json = '{
"result": {
"items": [
{
"name": "New York",
"code": 7294
},
{
"name": "Miami",
"code": 392
},
{
"name": "Los Angeles",
"code": 9182
}
]
}
}';
$phpobj = json_decode($json);
$name = getNameByCode($phpobj, "7294");
echo $name;