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

时间:2018-08-14 07:47:09

标签: php arrays json data-manipulation

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

这可能是一个简单的解决方案,所以希望有人可以帮助手指越过

2 个答案:

答案 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
        )
)