doyrte8419 2018-05-24 08:50
浏览 80
已采纳

如何选择要删除的密钥? PHP和JSON

I'm trying to select a dynamic method to remove key from a json file,at the moment, this code overwrite ALL json file and write {"0":{"name":null,"url":null}} do you know how can I solve it? I just want delete ONE key when I press delete button.

enter image description here

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"}]
  • 写回答

1条回答 默认 最新

  • doulie0178 2018-05-24 09:05
    关注

    You are reading the data into $data_array and writing out $data, so what you are writing is the data you want to delete - after you've processed it to delete all the records.

    What this code does is take the $url value (from however it's set) and goes through the $data_array read from the input file and if it finds a match, it removes it. Then writes out $data_array back to the file.

    $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));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据