关于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 相关文章推荐
简单的页面缓冲技术
Oct 09 PHP
ajax php 实现写入数据库
Sep 02 PHP
ecshop 订单确认中显示省市地址信息的方法
Mar 15 PHP
那些年一起学习的PHP(一)
Mar 21 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
Yii框架安装简明教程
May 15 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
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
JavaScript学习历程和心得小结
2010/08/16 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
使用python远程操作linux过程解析
2019/12/04 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
如何理解Python中包的引入
2020/05/29 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
学校出纳员岗位职责
2014/03/18 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
师德师风自查总结
2014/10/14 职场文书
党性分析自查总结
2014/10/14 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
python实现高效的遗传算法
2021/04/07 Python
python爬取豆瓣电影TOP250数据
2021/05/23 Python