关于php unset对json_encode的影响详解


Posted in PHP onNovember 14, 2018

前言

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就可以完美的转换为数组而不是对象了

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
两个强悍的php 图像处理类1
Jun 15 PHP
基于MySQL分区性能的详细介绍
May 02 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
Mar 15 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 #PHP
python进程与线程小结实例分析
Nov 11 #PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 #PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 #PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
Nov 10 #PHP
safari下载文件自动加了html后缀问题
Nov 09 #PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 #PHP
You might like
codeigniter框架批量插入数据
2014/01/09 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
javascript内置对象操作详解
2015/02/04 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
opencv python图像梯度实例详解
2020/02/04 Python
python3 实现口罩抽签的功能
2020/03/11 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
英国著名的药妆网站:Escentual
2016/07/29 全球购物
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
小学少先队活动方案
2014/02/18 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
交通工程专业推荐信
2014/09/06 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
高一化学教学反思
2016/02/22 职场文书
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android