Php 为什么我的JSON数组会变成一个对象?

Php 为什么我的JSON数组会变成一个对象?,php,json,unset,file-put-contents,Php,Json,Unset,File Put Contents,我试图从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_arr

我试图从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"]
我试图在保存数组之前取消序列化,但它不起作用


为什么会发生这种情况?

为了让
json\u encode
将带有数字键的PHP数组转换为json数组而不是json对象,键必须是顺序的。(参见中的示例4)

您可以在代码中使用
array\u values
来实现这一点,删除其中一项后,该值将重新为数组编制索引

$good_arr2 = json_encode(array_values($good_arr));

为了让
json\u encode
将带有数字键的PHP数组转换为json数组而不是json对象,键必须是顺序的。(参见中的示例4)

您可以在代码中使用
array\u values
来实现这一点,删除其中一项后,该值将重新为数组编制索引

$good_arr2 = json_encode(array_values($good_arr));

file\u put\u contents
中的
$good\u arr
更改为
$good\u arr2
。看起来只是一个打字错误。正如@jardis所指出的,您没有将刚刚用
json\u encode
创建的变量保存到文件中,而是保存了未编码的数组。很抱歉,这是输入错误。我编辑了我的问题@不要惊慌这里的罪魁祸首是
array\u search()
文件中更改
$good\u arr
,将内容放到
$good\u arr2
中。看起来像是打字错误。正如@jardis所指出的,您没有将刚刚用
json\u encode
创建的变量保存到文件中,而是保存了未编码的数组。很抱歉,这是输入错误。我编辑了我的问题@不要惊慌这里的罪魁祸首是
array\u search()