我正在尝试在我的json文件中搜索一个id,然后用php删除该对象。
详细说明:我将带有jQuery帖子的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文件)
答案 0 :(得分:1)
PHP将您的数组转换为对象可能是因为unset为您提供了关联数组而不是索引数组。您应该调用array_splice而不是unset,否则在根据this post中的想法取消设置值后调用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);