前言
PHP中有一个语句,它释放了名为unset的变量(从PHP4开始,unset不再是一个函数,而是一个语句)。本文主要介绍php unset对json_encode影响的相关内容。以下就不多说了。我们来看看详细的介绍。
首先运行一个php代码:
$a=Array(0='hello world ',1='girl ',2=' boy ');var _ dump(JSON _ encode($ a));联合国索赔(a[1]);var _ dump(JSON _ encode($ a));返回的结果如下:
string(28) '['hello world ',' girl ',' boy ']' string(29)' { ' 0 ' : ' hello world ',' 2':'boy'} '
发现数组的变量类型在取消设置前后变化,取消设置前是数组,取消设置后是对象
这是为什么?
看看unset和json_encode做了什么:
Unset()销毁指定的变量。可以删除数组中指定的元素,删除后索引不会重新排列。
Json_encode()用于用Json对变量进行编码。如果函数成功执行,将返回JSON数据,否则返回FALSE
但是如果json_encode转换的对象是数组,就需要注意了。请看下面的例子:
示例:
$a=Array(0='hello world ',1='girl ',2=' boy ');var _ dump(JSON _ encode($ a));$b=Array('name'='hello world ',' age'='18 ',' gender '=' man ');var _ dump(JSON _ encode($ b));操作结果:
string(28) '['hello world ',' girl ',' boy ']' string(48)' { ' name ' : ' hello world ',' age':'18 ',' gender':'man'} '
发现上述结果之一是数组,另一个是对象。
这是因为$a是索引数组(连续数组)而$b是关联数组(不连续数组)
看一个官方的例子:
上述输出的结果是:
注意:上面第二个数组转换为对象的原因是键值不是从0开始的,这也是一个不连续的数组
因此,在连续数组上执行unset后,它将成为不连续数组,不连续数组上的json_encode将成为对象。
总结:
在php中:
索引数组:指以数字为键的数组。这个关键值是自我增加的
关联数组:表示一个键值对应一个值,这个键值是不规则的,通常是我们自己指定的。
将索引数组转换为json后,它就是一个数组。关联数组在转换为json后是一个对象
展开一个:
然后,如果您想在连续数组上执行json_encode并成为一个对象,您可以这样做:
$arr=数组(' 0'='a ',' 1'='b ',' 2'='c ',' 3 '=' d ');echo JSON _ encode((object)$ arr);输出结果是:
{'0':'a ',' 1':'b ',' 2':'c ',' 3':'d'}
扩展2:
如何消除unset对json_encode的影响?获得的转换结果仍然是一个数组
使用unset时:
Foreach ($array as $k=$v) {if(一个条件){ unset($ array[$ k]);}}优化后:
$ tmp=array();Foreach ($array as $k=$v) {if (a条件)){ continue} $ tmp[]=$ v;} $ array=$ tmp优化的$数组上的Json_encode可以完美地转换成数组而不是对象
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。