• 售前

  • 售后

热门帖子
入门百科

关于php unset对json_encode的影响详解

[复制链接]
123457390 显示全部楼层 发表于 2021-10-26 12:59:55 |阅读模式 打印 上一主题 下一主题
媒介
PHP 中有个开释变量的语句叫做unset(从PHP4开始unset已经不再是一个函数了,而是一个语句),本文主要给各人介绍了关于php unset对json_encode影响的相干内容,下面话不多说了,来一起看看具体的介绍吧
先运行一段php代码:
  1. $a = Array(0=>'hello world', 1=>'girl', 2=>'boy');
  2. var_dump(json_encode($a));
  3. unset($a[1]);
  4. var_dump(json_encode($a));
复制代码
返回结果如下:
  1. string(28) "["hello world","girl","boy"]"
  2. string(29) "{"0":"hello world","2":"boy"}"
复制代码
发现对一个数组unset前后,变量的类型厘革了,unset前是数组,unset后是对象
这是为什么呢?
看下unset和json_encode毕竟是做了什么:
unset() 烧毁指定的变量。可以删除数组的指定元素,删除后索引不重排。
json_encode() 用于对变量进行 JSON 编码,该函数假如实行乐成返回 JSON 数据,否则返回 FALSE
而json_encode转换的对象假如是数组,那么就需要留意下了,看下面的示例:
举例:
  1. $a = Array(0=>'hello world', 1=>'girl', 2=>'boy');
  2. var_dump(json_encode($a));
  3. $b = Array('name'=>'hello world', 'age'=>'18', 'gender'=>'man');
  4. var_dump(json_encode($b));
复制代码
运算结果:
  1. string(28) "["hello world","girl","boy"]"
  2. string(48) "{"name":"hello world","age":"18","gender":"man"}"
复制代码
发现上面的结果一个是数组,一个是对象。
这是因为$a是索引数组(连续数组),$b则是关联数组(非连续数组)
再看一个官方的例子:

以上输出的结果是:

留意:上面的第二个数组之以是转化后变成对象,是因为键值不是从0开始,这也黑白连续数组
以是对一个连续数组实行unset后,会变成非连续数组,对非连续数组实行json_encode会变成对象。

总结:

php中:
索引数组:是指以数字为键的数组。并且这个键值 是自增的
关联数组:指的是一个键值对应一个值,并且这个键值是不规律的,通常都是我们本身指定的。
索引数组转为json后是数组。而关联数组转为json后是对象
拓展一:

那假如想对连续数组实行json_encode后变成对象可以这样做:
  1. $arr = array(
  2. '0'=>'a','1'=>'b','2'=>'c','3'=>'d'
  3. );
  4. echo json_encode((object)$arr);
复制代码
输出结果为:
  1. {"0":"a","1":"b","2":"c","3":"d"}
复制代码
拓展二:

怎样消除unset对json_encode的影响?达到转换结果依然为数组
利用unset时:
  1. foreach ($array as $k => $v) {
  2. if (某条件) {
  3.   unset($array[$k]);
  4. }
  5. }
复制代码
优化后:
  1. $tmp = array();
  2. foreach ($array as $k => $v) {
  3. if (某条件)) {
  4.   continue;
  5. }
  6. $tmp[] = $v;
  7. }
  8. $array = $tmp;
复制代码
对优化后的$array进行json_encode就可以完美的转换为数组而不是对象了
总结
以上就是这篇文章的全部内容了,渴望本文的内容对各人的学习或者工作具有肯定的参考学习代价,假如有疑问各人可以留言交换,谢谢各人对脚本之家的支持。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作