这里是工作中遇到的另一个小坑,虽然说起来很简单,但是如果不注意还是会中招。这里记录下来防止以后再犯这种错误。
问题描述
这是在工作中出现的一个问题,前端报接口返回值跟接口文档不一致。文档约定是返回数组,但是实际返回的是一个对象。
对象
但是我在本地和用另一个测试账户调用都是返回数组,只有这个账户返回对象。
数组
解决过程
于是跟着代码一步步跟下去,发现一直到最后一步,转json前返回值都一直是数组。转成json传给前端就变成对象了,而且还不是必现,有的账号有有的账号没有。
那问题肯定就出在转json这一步了。但是自己确实没想到是什么原因,根据咨询同事,才算补充了之前的一个知识盲点:
PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!
可以看到,第一张截图中其实是没有索引4的元素的,数组是不连续的。确实是因为我的方法中进行了array_unique
的操作,导致有元素被去除,但是索引没有重排。但是之前确实不知道如果索引不连续会被转成对象。
以后需要记住这一点,遇到这种情况在数组返回之前一定要进行array_values
过滤。
网友评论