关于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 相关文章推荐
动态生成gif格式的图像要注意?
Oct 09 PHP
配置支持SSI
Nov 25 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
PHP实现的MongoDB数据库操作类分享
May 12 PHP
PHP比你想象的好得多
Nov 27 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
PHP7常量数组用法分析
Sep 26 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
对laravel的session获取与存取方法详解
Oct 08 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 PHP
PHP 实现链式操作
Mar 09 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实现批量删除(封装)
2017/04/28 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
js实现左右轮播图
2020/01/09 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
Python排序算法实例代码
2017/08/10 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
python爬虫之自制英汉字典
2019/06/24 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
医院办公室主任职责
2013/12/29 职场文书
青春寄语大全
2014/04/09 职场文书
投资合作协议书
2014/04/17 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python