敲黑板!重点,要考!
PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!
背景:一次项目中,需要替换后台接口数据源。前端接口json数据返回需要的是数组。替换后在前端逻辑不变更的前提下数据获取出错。
其实呢,核心问题已经敲黑板划重点了。如果看完重点就恍然大悟呢,就没接下去看的需要了。如果还不明所以,且听我继续唠嗑。没人看的话我就当记录一次自己工作中踩的坑吧。
由于要重新获取后台的数据源,又要返回和之前接口规范一致的数据格式。在初次尝试中,改写完后台代码之后,前端的数据在某些指定为数组格式的数据源中,某个数据结构如下:
for(let i = 0 , len = this.list.length ; i < len ; i ++){
//业务逻辑
}
可见在循环体内执行的业务逻辑,当返回的数据变成了对象,是拿不到length的,打印出来
console.log(this.list.length); // undefinded;
那当然循环体内的所有业务逻辑也就自然不执行了。
当然,期初并没有意识到是PHP返回的数据格式悄悄的从原来规定的数组变成了对象了。
一通排查之后,没错,就是瞎鸡儿胡乱给我找了对象!!
那么问题来了:什么地方导致PHP给我胡乱整了个对象?
后台的数据输出格式是基本不变的。唯一区别的地方,新数据对源数据的输出,添加了一个排序控制。
在后台的循环中,根据数据权重进行了对数据重排。
本来的数据输出索引是 0,1,2.重排之后变成了1,2,0. 同样的数据,就是这个小坑,也就是前面那句重点
PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!
解决办法。在数据输出之前,用php的数组排序重新排序一次就可以了。
我用了的 ksort(),当然其他诸如 array_values() 也是可以的。只要让数组索引连续就行了。
至此,这个坑就告一段落,如有不才写错,欢迎指出,也欢迎留言就交流~谢过。