1

我正在尝试在我的 json 文件中搜索一个 id 并使用 php 删除该对象。

详细说明:我使用 jQuery post 将 id 发布到我的 delete.php 并在我的 delete.php 文件中搜索 id 并取消设置它。但是由于某种原因,如果我取消设置第一个对象,它会在我的 json 中添加一个数字并破坏它(我仍然可以添加更多对象但会破坏第一个对象)。

// delete.php 文件如下所示:

if(isset($_POST['deleteData'])){
    $data = $_POST['deleteData'];
    $dataJSON = json_decode(file_get_contents('datas.json'), true);  
    for($i = 0, $dataJSONLength = count($dataJSON); $i < $dataJSONLength; $i++){
      if($dataJSON[$i][data][0][id] == $data){
        unset($dataJSON[$i]);
        echo 'deleted';// needed for callback for feedback
      }
    }
    file_put_contents('datas.json', json_encode($dataJSON));
  }

   

// add.php 是:

if(isset($_POST['addData'])){
  $dataJSON = json_decode(file_get_contents('datas.json'), true);
  $dataJSON[] = $_POST['addData'];
  file_put_contents('datas.json', json_encode($dataJSON));
}

我的 datas.json 文件是相当嵌套的,所以我将发布问题所在:

[{"user":[{"browser":[{" // this is what it looks like when I add

{"1":{"user":[{"browser":[{" // this is what happens when I delete the first object. Notice "1" 

如果我不删除第一个对象,那么在删除第一个对象之前一切正常。有什么建议么?谢谢。(如果需要,我可以发布整个 json 文件)

4

1 回答 1

1

PHP 将您的数组变成一个对象可能是因为 unset 给您一个关联数组而不是索引数组。您应该调用 array_splice 而不是 unset ,或者在根据本文中找到的想法取消设置您的值之后调用 array_values 。

// your for loop:
for (...) {
    unset($dataJSON[$i]);
    ...
}
// After your for loop with all necessary values removed then call array_values to normalize the array.
$dataJSON = array_values($dataJSON);
于 2012-11-19T21:39:53.640 回答