关于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正则走开
Mar 15 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
CI框架简单分页类用法示例
Jun 06 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php数组随机排序实现方法
2015/06/13 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
php上传excel表格并获取数据
2017/04/27 PHP
php fread函数使用方法总结
2019/05/28 PHP
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
小程序实现长按保存图片的方法
2019/12/31 Javascript
python基于递归解决背包问题详解
2019/07/03 Python
Python画图高斯分布的示例
2019/07/10 Python
python实发邮件实例详解
2019/11/11 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
Python文件操作的面试题
2013/06/22 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
医科大学生毕业的自我评价分享
2013/11/12 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python