关于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读取30天之内的根据算法排序的代码
Apr 06 PHP
php && 逻辑与运算符使用说明
Mar 04 PHP
9个PHP开发常用功能函数小结
Jul 15 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
PHP中feof()函数实例测试
Aug 23 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
Laravel登录失败次数限制的实现方法
Aug 26 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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下的权限算法的实现
2007/04/28 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
js的一些常用方法小结
2011/06/29 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
Vue.js实现备忘录功能
2019/06/26 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
python检测lvs real server状态
2014/01/22 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
Python元组知识点总结
2019/02/18 Python
Python List cmp()知识点总结
2019/02/18 Python
Python中捕获键盘的方式详解
2019/03/28 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
浙江文明网签名寄语
2014/01/18 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android