关于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+DBM的同学录程序(1)
Oct 09 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
Jun 21 PHP
PHP操作数组相关函数
Feb 03 PHP
destoon调用discuz论坛中带图片帖子的实现方法
Aug 21 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
smarty中post用法实例
Nov 28 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 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通用防注入程序 推荐
2011/02/26 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
python实现画圆功能
2018/01/25 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
django框架cookie和session用法实例详解
2019/12/10 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
简单了解python列表和元组的区别
2020/05/14 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
百度JavaScript笔试题
2015/01/15 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
2014年国庆标语
2014/06/30 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书