php - 按值从 json 对象中删除
php - delete by value from json object
我有一个包含以下数据的 JSON 文件:
{
"0": {
"name": "Test1",
"devices": [
{
"name": "Test1",
"code": "654345",
"state": "on"
},
{
"name": "Test2",
"code": "876543",
"state": "off"
},
{
"name": "Test3",
"code": "44444",
"state": "off"
}
]
},
"1": {
"name": "Test2",
"devices": [
{
"name": "Test4",
"code": "987654",
"state": "on"
}
]
}
}
现在我想取消其中一台设备的设置。我已经尝试使用以下 PHP 代码,但无法弄清楚为什么它不起作用:
$file = '../data/data.json';
$json_data = file_get_contents($file);
$json = json_decode($json_data);
foreach ($json as $key => $value) {
foreach ($value->devices as $k => $v) {
if ($v->name == $_POST["name"]) {
unset($json[$key]);
}
}
}
file_put_contents($file, json_encode($json));
在此先感谢您的帮助!
你应该
unset($json->$key->devices[$k]);
首先 foreach 是因为你有多个对象,然后你去当前对象中的每个设备并搜索它们是否具有指定的名称。
所以你搜索一个值,然后按键删除。
我有一个包含以下数据的 JSON 文件:
{
"0": {
"name": "Test1",
"devices": [
{
"name": "Test1",
"code": "654345",
"state": "on"
},
{
"name": "Test2",
"code": "876543",
"state": "off"
},
{
"name": "Test3",
"code": "44444",
"state": "off"
}
]
},
"1": {
"name": "Test2",
"devices": [
{
"name": "Test4",
"code": "987654",
"state": "on"
}
]
}
}
现在我想取消其中一台设备的设置。我已经尝试使用以下 PHP 代码,但无法弄清楚为什么它不起作用:
$file = '../data/data.json';
$json_data = file_get_contents($file);
$json = json_decode($json_data);
foreach ($json as $key => $value) {
foreach ($value->devices as $k => $v) {
if ($v->name == $_POST["name"]) {
unset($json[$key]);
}
}
}
file_put_contents($file, json_encode($json));
在此先感谢您的帮助!
你应该
unset($json->$key->devices[$k]);
首先 foreach 是因为你有多个对象,然后你去当前对象中的每个设备并搜索它们是否具有指定的名称。 所以你搜索一个值,然后按键删除。