关于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 清除网页病毒的方法
Dec 05 PHP
php防攻击代码升级版
Dec 29 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
php+mysql实现数据库随机重排实例
Oct 17 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
Smarty简单生成表单元素的方法示例
May 23 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
php判断数组是否为空的实例方法
May 10 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 函数使用方法与函数定义方法
2010/05/09 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
srcElement表格样式
2006/09/03 Javascript
Prototype Selector对象学习
2009/07/23 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
使用matplotlib画散点图的方法
2018/05/25 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
利用python计算时间差(返回天数)
2019/09/07 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
马来西亚网上购物:Youbeli
2018/03/30 全球购物
教师自我反思材料
2014/02/14 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
小学生作文评语集锦
2014/12/25 职场文书
领导欢迎词范文
2015/01/26 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
实名检举信范文
2015/03/02 职场文书
校长师德表现自我评价
2015/03/04 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python