用PHP的json_encode方法将数组转换成json字符串的时候,变成数字索引字符串了?

原创 野人  2021-12-28 23:14  阅读 48 次

可能标题说的还不是非常清楚,那么在这里我给来几个列子,大伙们应该就能明白我说的意思了。

第一段代码,是正常的输出结果,也是预期希望能够返回给格式,具体代码如下:

<?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)))

?>

本文地址:https://www.yerenwz.com/5447.html
版权声明:本文为原创文章,版权归 野人 所有,欢迎分享本文,转载请保留出处!
PREVIOUS:已经是最后一篇了

发表评论