关于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可以强转回去,写在评论里了,还是更一下文吧)

 

posted @ 2019-04-09 21:50  DevelopersAndGamers  阅读(567)  评论(1编辑  收藏  举报