关于php unset对json_encode的影响详解
作者:冒雨ing 发布时间:2023-07-06 08:33:52
前言
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则是关联数组(非连续数组)
再看一个官方的例子:
以上输出的结果是:
注意:上面的第二个数组之所以转化后变成对象,是因为键值不是从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就可以完美的转换为数组而不是对象了
来源:https://www.cnblogs.com/saysmy/p/9957734.html


猜你喜欢
- 1、异常简介从软件方面来说,错误是语法或是逻辑上的,当python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了
- 内容摘要:本文介绍了使用asp来JMail v4.3发信的大部分常用方法,包括邮件基本信息、身份验证、附件等。无需很多的修改就可以
- 一、前言相关知识来自《python算法设计与分析》。初级排序算法是指几种较为基础且容易理解的排序算法。初级排序算法包括插入排序、选择排序和冒
- 阅读上一章:打印样式Chapter 12 CSS布局本书到此为止,讨论的主要是页面内部元素,也就是内容,但是大结构怎么办?长久以来,设计者都
- 如何用net/http构建一个简单的web服务Golang提供了简洁的方法来构建web服务package main import ( &nb
- 1 前言在工作中时常会有繁重的文案工作,接触了python 之后,就会觉得这个比较简单了,python 操作word 和 excel 是比较
- 效果图如下:图1(头像图片剪成圆形的,其他为透明)图2(给图片的4个角加椭圆)以前没处理过,处理起来真是有点费力呀。用到的模块:import
- 晚上突然间看到大猫的头像在闪动,速度打开一看,发现他问,以前我写button标签的时候有没有写type属性,老实的我只有诚实地告诉他,我没写
- 目录1、发送get请求2、发送post请求3、发送https请求4、文件上传5、文件下载6、timeout超时7、鉴权7.1、auth参数鉴
- 上次遇到一个需要打包下载批量图片的问题,找了一下发现这个好方法,记录一下。首先新建一个zipfile打包类:<?phpclass zi
- 1、查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist2、只查看当
- 前言本文将介绍如何使用ONNX将PyTorch中训练好的模型(.pt、.pth)型转换为ONNX格式,然后将其加载到Caffe2中。需要安装
- 1. Python的figure参数主要有:def figure(num=None, # autoincrement if None, el
- 在日常生活中我们经常在朋友圈看到有人发九宫格图片,其实质就是将一张图片切成九份,然后在微信中一起发这九张图。那么我们如何自己动手实现呢?说到
- Python内置函数1. classmethod、staticmethod、property 。上述三个内置函数在文章(Python进阶——
- 一、关于XML解析XML在Java应用程序里变得越来越重要, 广泛应用于数据存储和交换. 比如我们常见的配置文件,都是以XML方式存储的.
- MySQL日志文件相信大家都有很多的了解,MySQL日志文件一般在:/var/log/mysqld.log,下面就教您修改MySQL日志文件
- 0. 准备相关表来进行接下来的测试相关建表语句请看:https://github.com/YangBaohust/my_sqluser1表,
- 支持向量机常用于数据分类,也可以用于数据的回归预测1、Question?我们经常会遇到这样的问题,给你一些属于两个类别的数据(如子图1),需
- 正在学习javascript 的朋友可以把它当作小练习动手做一做。加强自己的动手编码能力。参考代码:<!DOCTYPE HTML PU