敲黑板!重点,要考!

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() 也是可以的。只要让数组索引连续就行了。

至此,这个坑就告一段落,如有不才写错,欢迎指出,也欢迎留言就交流~谢过。