PHP数组转json后,元素变为object的坑🙈
今天项目遇到一个bug,组件排序是用数组做的排序,所以遇到了排序后的数组转为json字符串后,前端解析后变为了对象,导致了出现bug,自己研究了一下发现了一个坑。
首先测试key有序且下标从0开始的一个索引数组,代码如下:
<?php
$a[0] = '1a';
$a[1] = '2a';
$a[2] = '3a';
$b['a'] = $a;
$jStr = json_encode($b);
echo $jStr;
//结果是这样的
{"a":["1a","2a","3a"]}
可以看到这时,josn里的元素是数组,符合预期。
接下来试一下下标0开始,但是key无序的索引数组
<?php
$a[0] = '1a';
$a[2] = '2a';
$a[1] = '3a';
$b['a'] = $a;
$jStr = json_encode($b);
echo $jStr;
//结果是这样的
{"a":{"0":"1a","2":"2a","1":"3a"}}
这个时候已经可以看到,其中的a数组已经被json转为了对象
这个时候突发奇想,试一下key有序但是下标不是从0开始的索引数组:
<?php
$a[1] = '1a';
$a[2] = '2a';
$a[3] = '3a';
$b['a'] = $a;
$jStr = json_encode($b);
echo $jStr;
//结果如下:
{"a":{"1":"1a","2":"2a","3":"3a"}}
可以看到即使索引数组下标连续,但是下标key不是从0开始的索引数组,依然是会被转换为对象。
结论
如果也遇到了类似的需求,需要某种排序要用到这一步,一定要注意一下这里,要转换为从0开始,下标连续不间断的新数组,json_encode后才会是一个数组的形式。
我后来是转换为从0开始下标的新数组,并且使用ksort之后,json才成功转换为了想要的数组格式。
遇到的坑记录一下。
CSDN潜伏多年了,第一次写博客,望各位大佬不要见笑哈哈哈。😅😅😅😅😅