php中array_unique函数自动产生键名的问题
在项目中遇到一个奇怪的bug,返回的json数据格式时不时的不对.而json是由一个numeric数组组成的,但是有时候返回的却是带键名(0,1,2,3…)的数组.
经过排查将问题锁定在array_unique函数上.原来array_unique函数在给数组去除重复的时候,会先将numberic数组转换为带键名的数组,然后再去重.
更糟糕的是:
在值里没有重复的情况下,array_unique不会对数组做任何改动,返回的仍然是numberic数组;
但是,在值里有重复项的情况下,返回的数字连键的序号都是不连续的.
例如:1
array_unique(array(1, 1, 2));
返回的结果是:1
2
3
4
5
6array(2) {
[0]=>
int(1)
[2]=>
int(2)
}
这就不是numeric数组了,直接做json_encode,会输出一个json对象{“0”:1,”2”:2},而不是数组[1,2].
解决方法是,在array_unique之后,在做一个array_values:1
2
3array_values(array_unique(array(1, 1, 2)));
//array_values()函数返回一个包含给定数组中所有键值的数组,
//但不保留键名。
问题便可解决.