【问题标题】:Manipulating JSON Array PHP - Find Value in array操作 JSON 数组 PHP - 在数组中查找值
【发布时间】:2018-08-14 07:47:09
【问题描述】:

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

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

【问题讨论】:

  • 您要搜索的值总是在同一个数组级别?
  • 哈桑你好,不幸的是他们坐在不同的级别,但每次都在"Technical"的主标题下说。有时他们不在那里。这仅取决于 API 返回的内容。
  • 好吧,发布的答案似乎适用,但您需要检查 Performance 值是否存在

标签: php arrays json data-manipulation


【解决方案1】:

我认为这段代码会做你想做的事。它有一个小的递归函数,它在数组中搜索具有属性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
        )
)

【讨论】:

  • 非常感谢@Nick。这正是我正在寻找的。然后我可以通过将search($arr, 'name', 'Performance') 更改为search($tech_array, 'name', 'Fuel consumption') 来使用它来查找数组的元素,这将返回它们的值!再次感谢!
  • 是的 - 这正是它应该如何工作的。很高兴我能帮上忙。
【解决方案2】:

在这种情况下,试试下面的代码:

<?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'];
   }
}
?>

【讨论】:

  • 不要犹豫,告诉我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
相关资源
最近更新 更多