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
在php多维数组中查找值并向该数组添加数据_Php_Arrays_Json_Multidimensional Array - Fatal编程技术网

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

在php多维数组中查找值并向该数组添加数据,php,arrays,json,multidimensional-array,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_a

我有一个多维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匹配的子数组中。非常感谢任何帮助。

JSON似乎只是带有“positions”字段的对象,即数组,您需要修改

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

您是否尝试过使用$data=array\U merge($data,array(…)而不是$data[]赋值?这非常有效,可以添加与现有数据内联的项。也感谢您对
$data
的解释!谢谢这非常有效,但另一个答案与我所追求的数据内联而不是另一个嵌套数组更为一致。感谢您抽出时间回答!