关于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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
php HandlerSocket的使用
May 02 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
PHP数组相关函数汇总
Mar 24 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
原生php实现excel文件读写的方法分析
Apr 25 PHP
有关PHP 中 config.m4 的探索
Aug 26 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
神族 Protoss 历史背景
2020/03/14 星际争霸
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
基于Django用户认证系统详解
2018/02/21 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
Python内存读写操作示例
2018/07/18 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
详解Python3中ceil()函数用法
2019/02/19 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
微信营销策划方案
2014/02/24 职场文书
工程质量承诺书范文
2014/03/27 职场文书
大学生就业意向书范文
2014/04/01 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python