Php 为什么我的JSON数组会变成一个对象?
我试图从test_bots.json中取消设置一个值并将其保存回去,但在这个过程中,数据格式不知何故发生了变化 test_bots.json包含以下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
["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()