在php多维数组中查找值并向该数组添加数据

时间:2017-03-14 21:31:56

标签: php arrays json multidimensional-array

我有一个多维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匹配的子数组中。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分: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 =>值命名。你的第二个foreach创建了一个名为$ data的变量,这意味着你正在丢失指向原始数组的指针!

答案 1 :(得分:1)

使用以下方法:

$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"
        }
    ]
}