关于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获得文件扩展名三法
Nov 25 PHP
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
PHP实现时间轴函数代码
Oct 08 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
ThinkPHP中limit()使用方法详解
Apr 19 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/08/09 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
php递归函数怎么用才有效
2018/02/24 PHP
jquery解析xml字符串示例分享
2014/03/25 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
详解jQuery事件
2017/01/13 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
学习Vue组件实例
2018/04/28 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Python获取系统默认字符编码的方法
2015/06/04 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
大学生自我鉴定
2013/12/08 职场文书
大学新生军训感言
2014/02/25 职场文书
电子商务专业求职信
2014/03/08 职场文书
护士求职信
2014/07/05 职场文书
教师求职信怎么写
2015/03/20 职场文书
离婚起诉书范本
2015/05/18 职场文书
民事诉讼代理词
2015/05/25 职场文书
2015元旦感言
2015/12/09 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android