关于php unset对json_encode的影响详解

作者:冒雨ing 时间:2023-07-06 08:33:52 

前言

PHP 中有个释放变量的语句叫做unset(从PHP4开始unset已经不再是一个函数了,而是一个语句),本文主要给大家介绍了关于php unset对json_encode影响的相关内容,下面话不多说了,来一起看看详细的介绍吧

先运行一段php代码:


$a = Array(0=>'hello world', 1=>'girl', 2=>'boy');

var_dump(json_encode($a));

unset($a[1]);

var_dump(json_encode($a));

返回结果如下:

string(28) "["hello world","girl","boy"]"
string(29) "{"0":"hello world","2":"boy"}"

发现对一个数组unset前后,变量的类型变化了,unset前是数组,unset后是对象

这是为什么呢?

看下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则是关联数组(非连续数组)

再看一个官方的例子:

关于php unset对json_encode的影响详解

以上输出的结果是:

关于php unset对json_encode的影响详解

注意:上面的第二个数组之所以转化后变成对象,是因为键值不是从0开始,这也是非连续数组

所以对一个连续数组执行unset后,会变成非连续数组,对非连续数组执行json_encode会变成对象。

总结:

php中:

索引数组:是指以数字为键的数组。并且这个键值 是自增的

关联数组:指的是一个键值对应一个值,并且这个键值是不规律的,通常都是我们自己指定的。

索引数组转为json后是数组。而关联数组转为json后是对象

拓展一:

那如果想对连续数组执行json_encode后变成对象可以这样做:


$arr = array(
'0'=>'a','1'=>'b','2'=>'c','3'=>'d'
);
echo json_encode((object)$arr);

输出结果为:

{"0":"a","1":"b","2":"c","3":"d"}

拓展二:

如何消除unset对json_encode的影响?达到转换结果依然为数组

使用unset时:


foreach ($array as $k => $v) {
if (某条件) {
 unset($array[$k]);
}
}

优化后:


$tmp = array();
foreach ($array as $k => $v) {
if (某条件)) {
 continue;
}
$tmp[] = $v;
}
$array = $tmp;

对优化后的$array进行json_encode就可以完美的转换为数组而不是对象了

来源:https://www.cnblogs.com/saysmy/p/9957734.html

标签:php,unset,json,encode
0
投稿

猜你喜欢

  • 网页设计三剑客

    2010-08-31 17:05:00
  • Doctype之谜

    2009-07-22 20:48:00
  • 图片格式与设计那点事儿

    2011-01-06 12:17:00
  • ASP 递归调用 已知节点查找根节点的函数

    2011-03-08 10:48:00
  • instanceof 内部机制探析

    2009-09-25 13:09:00
  • 视觉对交互的帮助——提升可用性

    2008-10-16 13:16:00
  • SQL Server 2008升级报表服务器数据库

    2008-11-18 12:36:00
  • FF和IE之间7个JavaScript的差异[译]

    2009-05-04 18:19:00
  • SHA256算法 asp源码

    2009-08-28 13:01:00
  • 基于JS实现动态跟随特效的示例代码

    2023-06-30 11:15:16
  • 信息分类是为了更好的索引

    2010-02-04 17:51:00
  • 使用 WinHttpRequest 伪造 Referer (附实战代码)

    2010-08-24 18:28:00
  • php文件类型MIME对照表(比较全)

    2023-06-08 07:24:10
  • Oracle 9i轻松取得建表和索引的DDL语句

    2010-07-16 13:09:00
  • 讲解SQL Server 2005数据库的同义词Bug

    2008-11-28 14:22:00
  • httpwatch 的页面元素加载时间表

    2008-02-13 08:28:00
  • 驯服不听话的网页表格

    2007-12-03 11:36:00
  • Mysql数据库名和表名的大小写敏感性问题

    2010-06-07 14:07:00
  • HTML中小meta的大作用

    2008-04-25 22:40:00
  • javascript增加干扰数据实现简单加密效果

    2011-02-24 11:07:00
  • asp之家 网络编程 m.aspxhome.com