一个php数组转json变对象的踩坑记录

这里是工作中遇到的另一个小坑,虽然说起来很简单,但是如果不注意还是会中招。这里记录下来防止以后再犯这种错误。

问题描述

这是在工作中出现的一个问题,前端报接口返回值跟接口文档不一致。文档约定是返回数组,但是实际返回的是一个对象。


一个php数组转json变对象的踩坑记录_第1张图片
对象

但是我在本地和用另一个测试账户调用都是返回数组,只有这个账户返回对象。


一个php数组转json变对象的踩坑记录_第2张图片
数组

解决过程

于是跟着代码一步步跟下去,发现一直到最后一步,转json前返回值都一直是数组。转成json传给前端就变成对象了,而且还不是必现,有的账号有有的账号没有。

那问题肯定就出在转json这一步了。但是自己确实没想到是什么原因,根据咨询同事,才算补充了之前的一个知识盲点:

PHP的数组在转JSON的时候,如果索引连续,则转成数组。如果索引不连续,则会转成对象!

可以看到,第一张截图中其实是没有索引4的元素的,数组是不连续的。确实是因为我的方法中进行了array_unique的操作,导致有元素被去除,但是索引没有重排。但是之前确实不知道如果索引不连续会被转成对象。

以后需要记住这一点,遇到这种情况在数组返回之前一定要进行array_values过滤。

你可能感兴趣的:(一个php数组转json变对象的踩坑记录)