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

报告相同问题?