欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP数组转json后元素变为object

程序员文章站 2022-07-06 16:01:22
PHP数组转json后,元素变为object的坑????今天项目遇到一个bug,组件排序是用数组做的排序,所以遇到了排序后的数组转为json字符串后,前端解析后变为了对象,导致了出现bug,自己研究了一下发现了一个坑。首先测试key有序且下标从0开始的一个索引数组,代码如下:

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潜伏多年了,第一次写博客,望各位大佬不要见笑哈哈哈。????????????????????

本文地址:https://blog.csdn.net/qq_38718834/article/details/109247153