PHP使用unset之后数组转化成对象

今天发现我同一个接口,用不同的账号去请求的时候,会出现数据类型不一样的情况,导致前端js报错

  • 正常情况下,没有使用走到unset的情况,请求接口数据返回是这样的


    image.png
users:[{},{},{},{}....{}]

我们发现在users的类型是数组,最外层用数组包裹着。


  • 使用另一个账号登录,请求同一个接口,这次有走进代码的unset,返回的数据突然就变成对象,也就是用{}包裹的


    image.png

    很明显发现users是这样一个格式,最外层使用的是{}包裹,而且仔细看,每个{}里的元素有显示他的下标,并且是不连贯的(通过unset函数)

users:{0:{},1:{},3:{},.....8:{}}

这样返回的数据,很显然在同一个页面,前端是没办法处理的,所以报了这样的错误,前端也不知道什么原因


image.png

我到php调试代码,发现,只要有走进unset的那一次请求,全部会出现,users的从数据转成对象的情况。
[{},{},{}] => {0:{},1:{},3:{}}
查了官方文档才知道,php unsetjson_encode() 的影响 ,因为我在return 到前端的时候,还是用了laravel自带的response()->json([])这个方法,也是相当于json_encode()

解决办法:
我使用 array_values() 函数重置了被unset操作过的数组下标,使它变成连贯的数组,这样再json_encode
就不会出现数据类型转换的情况了
注:因为我的users数组里的下表都是索引下表,所以我使用这个函数对我的数据没有影响

原因:json_encode() 对非连贯的数组,或者非索引下表的数组,转化之后会变成{} 包裹的格式,因为使用了unset,把原先索引下标按顺序的数组改变了,变成不连贯数组,所以会变成{}包裹的数据格式。
原因的参考文章链接:https://www.cnblogs.com/saysmy/p/9957734.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容