关于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自定义函数收代码
Aug 01 PHP
PHP处理excel cvs表格的方法实例介绍
May 13 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
Nov 20 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PDO::lastInsertId讲解
Jan 29 PHP
php无限极分类实现方法分析
Jul 04 PHP
php中array_fill函数的实例用法
Mar 02 PHP
PHP 实现重载
Mar 09 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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 smarty模版引擎中的缓存应用
2009/12/11 PHP
php比较相似字符串的方法
2015/06/05 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
python绘制圆柱体的方法
2018/07/02 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Python实现序列化及csv文件读取
2020/01/19 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
网络优化专员求职信
2014/05/04 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
学校少先队工作总结
2015/08/12 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
Oracle用户管理及赋权
2022/04/24 Oracle