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