这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
很多朋友很郁闷 JSON 数据中有时格式不定,一会儿是数组,一会儿是对象,怎么回事呢?下面小编给大家带来了 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 输出结构时,以这两种类型做封装和转换,来确保结构的确定性。
以上所述是小编给大家介绍的 PHP JSON 数组与对象,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/0802/343267.html