1

我正在尝试从 test_bots.json 中取消设置一个值并将其保存回来,但是在此过程中数据格式正在以某种方式发生变化。

test_bots.json 包含这个 JSON 数组:

["John","Vladimir","Toni","Joshua","Jessica"]

我的代码如下所示:

$good = 'Toni';
$good_arr = file_get_contents('test_bots.json');
$good_arr = json_decode($good_arr);

if(in_array($good, $good_arr)){
        $key = array_search($good, $good_arr);
         unset($good_arr[$key]);

        $good_arr2 = json_encode($good_arr);
        file_put_contents('test_bots.json',$good_arr2); 
    }

保存的输出是:

{"0":"John","1":"Vladimir","3":"Joshua","4":"Jessica"}

但我希望输出看起来像:

["John","Vladimir","Joshua","Jessica"]

我试图在保存之前取消序列化数组,但它不起作用。

为什么会这样?

4

1 回答 1

5

为了json_encode将带有数字键的 PHP 数组转换为 JSON 数组而不是 JSON 对象,键必须是顺序的。(请参阅PHP 手册json_encode中的示例 #4

您可以在代码中使用 来完成此操作array_values,这将在您删除其中一项后重新索引数组。

$good_arr2 = json_encode(array_values($good_arr));
于 2016-12-29T00:07:48.883 回答