首页 > 解决方案 > 如何选择要删除的密钥?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"}]

标签: phpjson

解决方案


您正在将数据读入$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));

推荐阅读