关于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输出控制功能在简繁体转换中的应用
Oct 09 PHP
简单的用PHP编写的导航条程序
Oct 09 PHP
针对初学PHP者的疑难问答(1)
Oct 09 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
php的dl函数用法实例
Nov 06 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
UTF-8正则表达式如何匹配汉字
Aug 03 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
详细对比php中类继承和接口继承
Oct 11 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程序--记数器
2006/10/09 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
js form action动态修改方法
2008/11/04 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
javascript 闭包详解
2015/07/02 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
详解Python中time()方法的使用的教程
2015/05/22 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
详解python中的文件与目录操作
2017/07/11 Python
django中的setting最佳配置小结
2017/11/21 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python实现二分查找算法
2020/09/18 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
教师简历自我评价
2014/02/03 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
DQL数据查询语句使用示例
2022/12/24 MySQL