关于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简单命令代码集锦
Sep 24 PHP
PHP入门学习的几个不错的实例代码
Jul 13 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
php中session定期自动清理的方法
Nov 12 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
ThinkPHP发送邮件示例代码
Oct 08 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
PHP多进程通信-消息队列使用
Mar 08 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
农民C键的运用技巧
2020/03/04 星际争霸
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python list是否包含另一个list所有元素的实例
2018/05/04 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
python使用PyQt5的简单方法
2019/02/27 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
创先争优制度
2014/01/21 职场文书
2013年军训通讯稿
2014/02/05 职场文书
党员干部承诺书
2014/03/25 职场文书
环保倡议书
2014/04/14 职场文书
个人创业事迹材料
2014/12/30 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
python游戏开发之pygame实现接球小游戏
2022/04/22 Python