【问题标题】:indexing JSON in php after removing item删除项目后在 php 中索引 JSON
【发布时间】: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-&gt;nodes。你想在 that 上运行 array_values$json-&gt;nodes = array_values($json-&gt;nodes).
  • 到目前为止你尝试过什么?你被困在哪里了?您能否分享您的脚本的示例输入,以便其他人可以运行它来帮助您?
  • @deceze 错误消失了,但 $json -> 链接值也消失了。 data2.json 文件现在只存储节点。感谢您一直以来的帮助。我们可能会进入解决方案。
  • 听起来你并没有把值赋值回$json-&gt;nodes,而是直接把array_values($json-&gt;nodes)的返回值写到了文件…

标签: php json


【解决方案1】:
$json = file_get_contents("data2.json");
$data = json_decode($json);

unset($data->nodes[$data_deleteNode]);

$data->nodes = array_values($data->nodes);
    
$json = json_encode($data);
file_put_contents("data2.json", $json)

$data-&gt;nodes 是您正在修改且需要重置的阵列。你这样做:

$data->nodes = array_values($data->nodes);

还请注意,我重命名了您的变量,因此 $json 指的是 JSON 编码的文本,$data 指的是解码的数组/对象。

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多