宝哥软件园

详细说明php unset对json_encode的影响

编辑:宝哥软件园 来源:互联网 时间:2021-08-28

前言

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可以完美地转换成数组而不是对象

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

更多资讯
游戏推荐
更多+