我有一个通过API传入的JSON数组。我正在寻找打印数据,但是对于每个项目返回的值并不总是位于同一位置。以下是返回的JSON的示例-这只是JSON的一部分,它是一个大文件:
"standardSpecification": [
{
"Technical": [
{
"id": 13501,
"name": "Performance",
"description": "XXXXX",
"value": "standard",
"items": [
{
"id": 13502,
"name": "maximum speed (km/h)",
"value": 169
},
{
"id": 13503,
"name": "acceleration 0-62mph (s)",
"value": 12.2
},
{
"id": 113502,
"name": "maximum speed (mph)",
"value": 105
}
]
},
我无法使用诸如操纵之类的东西,因为对于某一项它可能是正确的,而不是另一项:
echo $tech_array['standardSpecification'][5]['Technical'][11]['items'][8]['value'];
是否可以找到“性能”,然后打印出与此相关的所有项目?我知道我可以使用in_array()和array_search()但是我不知道如何返回项目。
这可能是一个简单的解决方案,所以希望有人可以帮助手指越过。
答案 0 :(得分:0)
在这种情况下,请尝试以下代码:
<?php
$json = "";//you json api response
$jsonArray = json_decode($json,true);
foreach($jsonArray['standardSpecification'] as $spec){
foreach($spec['Technical'] as $technical){
echo "Performance: ".$technical['name'];
}
}
?>
答案 1 :(得分:0)
我认为这段代码可以满足您的需求。它具有一个小的递归函数,该函数在数组中搜索具有属性name
= Performance
的对象并返回该节点。然后,您可以简单地从该节点提取items
属性。
$arr = json_decode($json, true);
// look for the array element which is 'name' => 'Performance'
function search($arr, $key, $value) {
foreach ($arr as $k => $v) {
if (is_array($v)) {
if (($a = search($v, $key, $value)) !== false)
return $a;
continue;
}
if ($k == $key && $v == $value) return $arr;
}
// not found, return false
return false;
}
if (($node = search($arr, 'name', 'Performance')) !== false) {
$items = $node['items'];
print_r($items);
}
您提供的示例数据的输出:
Array
(
[0] => Array
(
[id] => 13502
[name] => maximum speed (km/h)
[value] => 169
)
[1] => Array
(
[id] => 13503
[name] => acceleration 0-62mph (s)
[value] => 12.2
)
[2] => Array
(
[id] => 113502
[name] => maximum speed (mph)
[value] => 105
)
)