json_encode函数的奇怪行为

时间:2012-11-21 17:14:16

标签: php

我有这个正常的数组名称$ arr .. 并尝试使用array_push()函数在数组上推送一些东西..比如array_push( $arr['alerts_data'], 999 ); 它产生这个输出:

Array
(
    [alerts_data] => Array
        (
            [0] => 169
            [1] => 175
            [2] => 111
            [3] => 48
            [4] => 999
        )

)

当我使用json_encode时,我得到了:

{"alerts_data":[169,175,111,48,111,999]}

但是,当我试图取消()来自$ arr之类的东西时:

unset( $arr['alerts_data'][4] );// will remove removes the 999

然后再次使用json_encode,我得到了这个json对象

{"alerts_data":{"0":169,"1":175,"2":111,"3":48}}

这里有什么问题?你能告诉?我想通过使用unset()函数来实现上面的第一个编码json。

2 个答案:

答案 0 :(得分:4)

是的,因为数组键不再连续,所以它被视为关联数组,PHP关联数组成为JavaScript对象,因为JavaScript没有关联数组。

使用 array_splice() 从阵列中干净地删除元素。

答案 1 :(得分:2)

您的密钥有一个间隙(从3到5),因此必须创建一个对象才能使其有效。两种可能的解决方案:

array_splice($arr['alerts_data'], 4, 1);

unset($arr['alerts_data'][4]);
$arr['alerts_data'] = array_values($arr['alerts_data']);