关于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编码规范-php coding standard
Mar 16 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
使用PHP生成二维码的两种方法(带logo图像)
Mar 14 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php解析json数据实例
Aug 19 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
10个实用的PHP正则表达式汇总
2014/10/23 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
Python实现子类调用父类的方法
2014/11/10 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
Python批量发送post请求的实现代码
2018/05/05 Python
python之拟合的实现
2019/07/19 Python
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
孝敬父母的演讲稿
2014/05/14 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
计划生育证明书写要求
2014/09/17 职场文书
2014年绿化工作总结
2014/12/09 职场文书
消防验收申请报告
2015/05/15 职场文书
小学中队长竞选稿
2015/11/20 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
Anaconda配置各版本Pytorch的实现
2021/08/07 Python