关于PHP索引数组unset某key后json_encode相关问题踩坑记录

 

<?php

$a = [1,2,3];
var_dump(json_encode($a));  #string(7) "[1,2,3]"
unset($a[0]); var_dump(json_encode($a)); #string(13) "{"1":2,"2":3}" 
$b = [1,2,3];
var_dump(json_encode($b));  #string(7) "[1,2,3]"

unset($b[2]);
var_dump(json_encode($b));  #string(5) "[1,2]"

 

unset()这个函数经常用,但是一直忽略了一个重要问题:

        索引数组unset的如果不是数组最后一位的key,也就是说索引顺序0,1,2会被unset成0,2 或者 1,2 这种情况,虽然打印数组还是array,但是已经被转成关联数组了。

 

另外看了下php json_encode函数的源码。关联数组json_encode的时候可以通过传参,强制输出成object的形式(JSON_FORCE_OBJECT)。

       比如json_encode([1,2,3], JSON_FORCE_OBJECT) => "{"0":1,"1":2,"2":3}"。其他特殊需求的转换格式参考php文档吧。

以后还是慎用unset,处理业务逻辑最好还是用赋值新数组代替吧。(后来想到用一下array_values可以强转回去,写在评论里了,还是更一下文吧)

 

转载于:https://www.cnblogs.com/camouflage/p/10680062.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值