可能标题说的还不是非常清楚,那么在这里我给来几个列子,大伙们应该就能明白我说的意思了。
第一段代码,是正常的输出结果,也是预期希望能够返回给格式,具体代码如下:
<?php $arr1 = [ ['name' => "yeren"], ['name' => "xiaozhang"] ]; var_dump(json_encode($arr1));//[{"name":"yeren"},{"name":"xiaozhang"}] ?>
第二段代码,稍微改造了,二维码数组里面变成了key->value
的形式,具体代码如下:
<?php $arr2 = [ 1 => ['name' => "yeren"], 2 => ['name' => "xiaozhang"] ]; var_dump(json_encode($arr2));//{"1":{"name":"yeren"},"2":{"name":"xiaozhang"}} ?>
通过两段代码的输出对比,可以很明显看的出来差别了吧,在第二段代码中,明明最外层是个数组,但是输出结果却是个{}
,这搞得有点不太明白了,不过好在最终解决了,要想第二段代码的输出结果还是同第一段一样的话,那么必须这样做。
首先,对这个异常输出的结果,做个解释先,就是说json_encode
方法,会根据索引是不是连续的来判断是否输出[]
/{}
,而在第一段代码中,表面上看上去没有索引,但是默认是有个数字索引的,而且是0,1,2...这样按序下去的数字索引,而在第二段代码中,二维数组里面的索引是人为设置,是1,2
,大家是不是感觉看上去是连续的,但是这个连续不是从0
开始的,所以还是不连续的,这有点恶心了。
所以,知道了具体原因后,其实代码就好写多了,那么第二段改造后,如下:
法一:手动修改索引法,数量不是很大,手动修改就也行,但是对于懒癌的我,不可能滴,还有法二呢。
<?php // $arr2 = [ 0 => ['name' => "yeren"], 1 => ['name' => "xiaozhang"] ]; var_dump(json_encode($arr2)); ?>
法二:利用自带的array_merge
数组方法(仅针对数字索引的数组),自动修复索引从0开始,大家一定要注意了,该方法也是有局限性的,具体的大家可以看这篇文章;PHP重置数组为连续数字索引的几种方式总结
<?php $arr2 = [ 1 => ['name' => "yeren"], 2 => ['name' => "xiaozhang"] ]; var_dump(json_encode(array_merge($arr2))) ?>