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がインデックス付き配列ではなく連想配列を提供しているために、配列をオブジェクトに変換しています。unsetの代わりにarray_spliceを呼び出すか、この投稿にあるアイデアに従って値を設定解除した後に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 に答える