(实用篇)PHP JSON数组与对象的理解

 

在PHP后端和客户端数据交互的过程中,JSON数据中有时格式不定,一会儿是数组,一会儿是对象,弄得客户端开发人员要崩溃的感觉。

因此,前后端相关人员先对PHP的json_encode函数原理有必要的了解是最重要的一个环节。

PHP中的array是个万能的数据结构,并不像其它语言根据需要的场景会定义很多约束性的数据类型来描述结构,所以PHP程序员是很难给客户端人员讲清楚返回的是什么结构的数据的。

也就变成明明是通过PHP的数组数据编码成json的,但输出值有时是数组、有时是对象的情况。

<?php
/*
如果你想生成一个json格式的数组格式(Vector)而非对象格式(Map)的,
那么数据的下标:
必须是数字索引,
必须从0开始,
必须从小到大依次增加、中间不可以跳跃、顺序不可变动.
*/

//符合数组
$vector = [
    12, 23, 18
];
echo json_encode($vector);

//符合数组
$vector2 = [
    0 => 12, 1 => 23, 2 => 18
];
echo json_encode($vector2);

//不符合数组,下标有跳跃
$map = [
    0 => 12, 1 => 23, 2 => 18, 4 => 20
];
echo json_encode($map);

//不符合数组,下标顺序不对
$map = [
    0 => 12, 1 => 23, 3 => 18, 2 => 20
];
echo json_encode($map);

//不符合数组,下标没有从0开始
$map_1 = [
    1 => '111', 2 => 'asdfa'
];
echo json_encode($map_1);

//典型的对象格式
$map_2 = ['abc' => 1, 'de' => 2, 'fi' => null];
echo json_encode($map_2);

/**
 * 请注意上面的变量命名,对应于Hack中的概念,Vector和Map为两种数据
   集合类型
 * 如果你需要将"索引数组"强制转化成"对象",可以这样写
 * json_encode((object) $a);
 * 或
 * json_encode ($a, JSON_FORCE_OBJECT);
 *
 */

解决方案是什么呢?

就是通过PHP封装Vector和Map这两种数据结构的类,在构造json输出结构时,以这两种类型做封装和转换,来确保结构的确定性。

至少,先要建立这样的类型概念。

20121022133013274394

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/1436.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚的头像重蔚管理团队
上一篇 2016年10月26日 08:34
下一篇 2016年10月27日 08:59

相关推荐

  • 小编教你学php什么时候学二次开发比较好。

    学习PHP二次开发的最佳时机 在当今这个高度信息化的社会,互联网已经成为了我们生活中不可或缺的一部分,而作为互联网的基石,Web开发技术也变得越来越重要,PHP作为一种广泛应用的服务器端脚本语言,因其简单易学…

    2024年7月3日
    00
  • 重蔚php学习第三十五天——php关于变量的覆盖

    html文件: php文件: 结果: 经过测试: post覆盖get cookie覆盖post和get cookie > post > get   修改php配置文件,配置变量的优先级 在5.3以前的版本中, 在5.3及以后的版本中   这个选项用于控…

    2017年10月17日 PHP自学教程
    0412
  • (实用篇)PHPExcel读取Excel文件的实现代码

    用PHPExcel读取Excel 2007 或者Excel2003文件,需要的朋友,可以参考下。 涉及知识点: php对excel文件进行循环读取 php对字符进行ascii编码转化,将字符转为十进制数 php对excel日期格式读取,并进行显示转化 php…

    2016年10月21日
    0272
  • PHP8.0中的trait组合

    随着PHP语言的不断发展和升级,trait(特征)这个概念也越来越被程序员所认知和广泛应用。在PHP8.0版本中,trait组合成为了一个非常有价值的特性,对于编写高质量、易维护的代码来说,这是至关重要的。 在过去的版…

    2023年5月18日
    05
  • 看看PHP 多进程处理任务

    pcntl 模块(非 Unix 类系统不支持此模块) 一个 PHP 多进程简单例子大概是这个样子: // 5 个子进程处理任务for ($i = 0; $i < 5; $i++) { $pid = pcntl_fork(); if ($pid == -1) { die("could not fork&q…

    2022年6月20日
    0128
  • 如何使用PHP实现微信小程序中的实时视频播放。

    随着移动互联网技术的发展,微信小程序越来越受到人们的关注和喜爱,其中实时视频播放是一个不可或缺的功能。本文将介绍如何使用PHP实现微信小程序中的实时视频播放。 一、获取微信小程序的appid和secret 在微信公…

    2023年6月3日
    06
  • PHP函数的Slim函数。

    PHP是一门非常流行的服务器端脚本语言,在Web开发领域有着广泛的应用。其中,Slim框架是PHP中一个轻量级、灵活、易于学习和使用的开源框架,提供了构建web应用程序所需的基本功能和组件,并且可扩展性强,适用于中…

    2023年5月23日
    00
  • 实现基于PHP的强大Web应用。

    作为一种流行的后端编程语言,PHP已经被广泛地应用于各类Web应用的开发中。其优点在于其开放性、易用性和强大的生态系统,使得PHP成为了许多开发者的首选。 但是,要想实现一款强大的Web应用,仅凭PHP作为编程语言…

    2023年5月30日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息