关于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数组应用之比较两个时间的相减排序
Aug 18 PHP
php 按指定元素值去除数组元素的实现方法
Nov 04 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
PHP数组基本用法与知识点总结
Jun 02 PHP
PHP扩展安装方法步骤解析
Nov 24 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 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 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php实现rc4加密算法代码
2012/04/25 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
javascript prototype 原型链
2009/03/12 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
迎接领导欢迎词
2014/01/11 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
社区文艺活动方案
2014/08/19 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
人民检察院起诉书
2015/05/20 职场文书
幼儿园中班教学反思
2016/03/03 职场文书