php - 如何选择要删除的密钥?PHP 和 JSON
问题描述
我正在尝试选择一种动态方法来从 json 文件中删除密钥,目前,这段代码会覆盖所有 json 文件并写{"0":{"name":null,"url":null}}
你知道我该如何解决吗?当我按下删除按钮时,我只想删除一个键。
PHP:
<?php
var_dump($_POST);
$data_url = 'js/json.json';
$data_json = file_get_contents($data_url);
$data_array = json_decode($data_json, true);
$data[] = array(
'name' => $name,
'url' => $url
);
foreach($data as $key=>$val){
// check status
if ($val["status"]=="DELETE"){
// this deletes record from array
unset($data[$key]);
}
}
file_put_contents('js/json.json', json_encode($data, JSON_FORCE_OBJECT));
header('Location: http://URL/index.php');
?>
JSON:
[{"name":"asdf","url":"asdf"},{"name":"asfd","url":"dsaf"}]
解决方案
您正在将数据读入$data_array
并写出$data
,因此您正在写入的是要删除的数据 - 在您处理完数据以删除所有记录之后。
这段代码所做的是获取$url
值(无论它是从什么设置的)并$data_array
从输入文件中读取,如果找到匹配项,则将其删除。然后写$data_array
回文件。
$data_url = 'js/json.json';
$data_json = file_get_contents($data_url);
$data_array = json_decode($data_json, true);
// Next line just for testing
//$url = "asdf"; // $_POST['URL']; ?
foreach($data_array as $key=>$val){
// check URL
if ($url == $val["url"]){
// this deletes record from array
unset($data_array[$key]);
}
}
$data_array = array_values($data_array);
file_put_contents($data_url, json_encode($data_array));
推荐阅读
- r - 将包含多个 gganimate 动画的 magick gif 导出为 mp4
- python - 从终端使用 python 时 -i 和 -u 有什么区别?
- emulation - 如何在 qemu-system-ppc 中挂载外部磁盘?
- node.js - Nodejs:如何在另一个路由器中使用来自路由器的变量
- flutter - 使用flutter redux,StatefulWidget 是可选的吗?
- php - 在响应中首先排序并显示具有大多数值的数组(php)
- javascript - 将多个过滤器应用于数组javascript
- .net - 添加项目引用时出现 Blazor Webassembly 错误
- google-sheets - 使用 ARRAYFORMULA Google 表格的 TEXTJOIN
- c - 带有 adafruit RGBLCDShield Buttons 奇怪行为的 Arduino