Php unset()将数组转换为对象

Php unset()将数组转换为对象,php,arrays,json,Php,Arrays,Json,我有一个数组,我想从中取消设置第一项,但当我这样做时,我将信息作为JSON发送,结果将作为对象读取 PHP数组如下所示: $myArray = ["one", "two", "three", "four"] 当我将其作为JSON与JSON\u encode($myArray)一起发送时,正如我所期望的: ["one","two","three","four"] 但当我第一次取消设置时: unset($myArray[0]); …我从JSON\u encode($myArray)获取的JSO

我有一个数组,我想从中取消设置第一项,但当我这样做时,我将信息作为JSON发送,结果将作为对象读取

PHP数组如下所示:

$myArray = ["one", "two", "three", "four"]
当我将其作为JSON与
JSON\u encode($myArray)
一起发送时,正如我所期望的:

["one","two","three","four"]
但当我第一次取消设置时:

unset($myArray[0]);
…我从
JSON\u encode($myArray)
获取的JSON内容如下:

{"1":"one","2":"two"}
是什么使它如此,我如何防止它出现在对象表示法中


据我所见,在PHP中,剩余数组的行为类似于数组,我可以使用数组函数,例如
array\u search
array\u intersect
,等等。

在JSON中,数组总是从索引0开始。因此,如果在PHP中删除元素0,数组将从1开始。但这不能用JSON中的数组表示法表示。因此它被表示为一个对象,它支持键/值对

要使JSON将数据表示为数组,必须确保数组从索引0开始,并且没有间隙

要实现这一点,请不要使用unset,而是使用:

这样,数组将发生移位,确保第一个元素位于索引0处

如果它始终是要删除的第一个元素,则可以使用较短的:


我不太清楚为什么它会转换为
对象
,而不是
数组
。这当然是因为没有索引
0
(确实如此)

要防止出现这种情况,请使用重建数组索引的
array\u value

unset($myArray[0]);
$myArray = array_values($myArray);

我使用了另一种解决方案,但是对于替代方案和函数信息,使用+1。我得到了一个错误,array_values()希望参数1是array,object给定的。
array_shift(myArray);
unset($myArray[0]);
$myArray = array_values($myArray);