【发布时间】:2021-06-07 09:52:47
【问题描述】:
在使用unset($json -> nodes[$data_deleteNode]) 删除条目后,如何重新索引 JSON?常用的方法array_values($json),通常用来缩小差距是行不通的。我理解错误信息,但不知道如何解决它。
array_values() expects parameter 1 to be array, object given
有一个类似的线程引用了我尝试过的解决方案 - PHP json_encode as object after PHP array unset() 唯一的区别是 JSON。
如果我不执行任何排序,unset() 会添加一个索引,导致我的 JSON 无法被其他脚本读取。
受影响的 PHP:
<?php
header("Access-Control-Allow-Origin: *");
$data_deleteNode = ($_POST['id']);
$json = file_get_contents("data2.json");
$json = json_decode($json);
//$data_deleteNode = json_decode($data_deleteNode);
//array_splice($json, 3, 1);
printf("%s\n", json_encode($json));
unset($json -> nodes[$data_deleteNode]);
printf("%s\n", json_encode($json));
$json = array_values($json);
$json = json_encode($json);
file_put_contents("data2.json", $json)
?>
更新:修改后的 Playground,显示错误 https://3v4l.org/XPbuo#v730
【问题讨论】:
-
$json是一个对象。您修改的数组是$json->nodes。你想在 that 上运行array_values。$json->nodes = array_values($json->nodes). -
到目前为止你尝试过什么?你被困在哪里了?您能否分享您的脚本的示例输入,以便其他人可以运行它来帮助您?
-
@deceze 错误消失了,但 $json -> 链接值也消失了。 data2.json 文件现在只存储节点。感谢您一直以来的帮助。我们可能会进入解决方案。
-
听起来你并没有把值赋值回
$json->nodes,而是直接把array_values($json->nodes)的返回值写到了文件…