【问题标题】:Finding a value in php multidimensional array and adding data to that array在php多维数组中查找一个值并将数据添加到该数组
【发布时间】:2017-03-14 21:31:55
【问题描述】:

我有一个需要向其添加值的多维 JSON 数组。 JSON 数组是外部的,我无法更改其格式。

我尝试了 3 个foreach 循环,但后来我迷失了如何将数据添加到数组中。我一直发现自己陷入了一个循环。

这是 JSON:

{
    "positions": [{
        "report_at": "2017-03-13 20:04:10",
        "elev": "0",
        "dir": "0",
        "id": "1"
    }, {
        "report_at": "2017-03-07 00:28:14",
        "elev": "1240",
        "dir": "89",
        "id": "2"
    }]
}

我有需要添加到 id 1 的唯一数据,以及需要添加到 id 2 的另一组唯一数据。

这是我尝试过的:

$data = json_decode( $result, true );

foreach ( $data as $d ) {
    foreach ( $d as $key => $data ) {
        if ( $data['id'] == '1' ) {
            $data[] = array(
                "online_status" => "1",
                "name" => "Test User",
            );
        } elseif ( $data['id'] == '2' ) {
            $data[] = array(
                "online_status" => "0",
                "name" => "Another User",
            );
        }
    }
}

$json = json_encode( $data );
echo $json;

我认为,一旦我弄清楚了这一点,我就可以从 MySQL 中提取数据,根据该数据构建小数组,然后将它们添加到 ID 与 SQL ID 匹配的这些子数组中。任何帮助表示赞赏。

【问题讨论】:

  • 你试过用 $data = array_merge( $data, array(....) ) 代替 $data[] 赋值吗?

标签: php arrays json multidimensional-array


【解决方案1】:

JSON 似乎只是“位置”字段的对象,它是数组,您需要修改。

$data = json_decode($json, TRUE);

foreach ($data['positions'] as &$userInfo) {
    if ($userInfo['id'] == 1) {
          $userInfo['online_status'] = 'offline';
          $userInfo['name'] = 'Test user';
    }
}

echo json_encode($data);

注意foreach中的“&”号,表示在foreach中所做的修改会被保存到原始数组中。

您还应该注意 foreach 中的 key=>value 命名。您的第二个 foreach 创建了名为 $data 的变量,这意味着您正在丢失指向原始数组的指针!

【讨论】:

  • 这很好用,并且可以将项目添加到现有数据中。也谢谢$data的解释!谢谢!
【解决方案2】:

使用以下方法:

$data = json_decode($result, true);
    foreach ($data['positions'] as &$item) {
    if ($item['id'] == "1") {
        $item = array_merge($item, ["online_status" => "1", "name" => "Test User"]);
    } else if ($item['id'] == "2") {
        $item = array_merge($item, ["online_status" => "0", "name" => "Another User"]);
    }
}

$json = json_encode($data, JSON_PRETTY_PRINT);
echo $json;

输出:

{
    "positions": [
        {
            "report_at": "2017-03-13 20:04:10",
            "elev": "0",
            "dir": "0",
            "id": "1",
            "online_status": "1",
            "name": "Test User"
        },
        {
            "report_at": "2017-03-07 00:28:14",
            "elev": "1240",
            "dir": "89",
            "id": "2",
            "online_status": "0",
            "name": "Another User"
        }
    ]
}

【讨论】:

  • 这很好用,但另一个答案更符合我对数据内联而不是另一个嵌套数组的追求。感谢您抽出宝贵时间回答!
猜你喜欢
  • 2021-12-29
  • 2017-12-22
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2019-05-30
  • 2014-12-13
  • 1970-01-01
  • 2019-04-17
相关资源
最近更新 更多