Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
操作JSON数组PHP-在数组中查找值_Php_Arrays_Json_Data Manipulation - Fatal编程技术网

操作JSON数组PHP-在数组中查找值

操作JSON数组PHP-在数组中查找值,php,arrays,json,data-manipulation,Php,Arrays,Json,Data Manipulation,我有一个通过API提供的JSON数组。我希望打印出数据,但是返回的值并不总是在每个项目的相同位置。下面是返回的JSON示例-这只是JSON的一部分,它是一个大文件: "standardSpecification": [ { "Technical": [ { "id": 13501, "name": "Performance", "description":

我有一个通过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(),但是我不知道如何返回项目


这可能是一个简单的解决方案,所以我希望有人能帮我祈祷。

在这种情况下,请尝试以下代码:

<?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')
来查找数组中的元素,这将返回它们的值!再次感谢!是的,这正是它应该如何工作的。很高兴我能帮忙。