操作JSON数组PHP-在数组中查找值
我有一个通过API提供的JSON数组。我希望打印出数据,但是返回的值并不总是在每个项目的相同位置。下面是返回的JSON示例-这只是JSON的一部分,它是一个大文件:操作JSON数组PHP-在数组中查找值,php,arrays,json,data-manipulation,Php,Arrays,Json,Data Manipulation,我有一个通过API提供的JSON数组。我希望打印出数据,但是返回的值并不总是在每个项目的相同位置。下面是返回的JSON示例-这只是JSON的一部分,它是一个大文件: "standardSpecification": [ { "Technical": [ { "id": 13501, "name": "Performance", "description":
"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(),但是我不知道如何返回项目
这可能是一个简单的解决方案,所以我希望有人能帮我祈祷。在这种情况下,请尝试以下代码:
<?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'];
}
}
?>
我想这段代码可以满足您的要求。它有一个小的递归函数,该函数在数组中搜索具有属性
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
)
)
您搜索的值总是在同一个数组级别?您好,Hassan,不幸的是,它们位于不同的级别,但每次都位于
“Technical”
的主标题下。有时他们不在那里。这取决于API返回的内容。好吧,发布的答案似乎适用,但您需要检查性能值是否存在。请不要犹豫,尽管问,告诉我@Nick非常感谢您。这正是我要找的。然后,我可以通过将search($arr,'name,'Performance')
更改为search($tech\u array,'name,'Fuel consumption')
来查找数组中的元素,这将返回它们的值!再次感谢!是的,这正是它应该如何工作的。很高兴我能帮忙。