PHP数组转json后元素变为object

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

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值