(实用篇)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中使用TDD。

    随着软件开发中采用敏捷开发的方式越来越普及,测试驱动开发(TDD)已经成为许多开发人员的重要实践。在TDD中,写代码之前先编写测试用例,通过测试来驱动整个开发过程。这篇文章将介绍如何在PHP中使用TDD来开发高…

    2023年5月23日
    03
  • 小编教你php字符串长度。

    在PHP中,获取字符串的长度是一个常见的需求,我们可以使用内置的`strlen()`函数来实现这个功能,`strlen()`函数返回一个字符串的长度(以字节为单位),如果字符串包含多字节字符(例如某些特殊符号),则返回的长度可…

    2024年6月20日
    02
  • PHP8.0中的电子邮件服务库:Mailgun

    近年来,PHP成为了Web开发世界中的一大主流。无论是开发Web应用程序,构建API还是建立电子商务网站,PHP都是开发者们的首选语言。然而,即使是PHP,要为它构建一个完整的Web应用程序也需要很多额外的工作。其中之一…

    2023年5月18日
    03
  • PHP中使用Redis实现分布式计算。

    在分布式系统中,为了提高系统性能和可扩展性,常常需要将计算任务分配到多个计算节点上进行处理。这时候,使用缓存系统来协调这些节点之间的计算任务是一种常见的方法。在这种方法中,当一个节点需要计算一个任务…

    2023年5月21日
    05
  • PHP与NoSQL数据库的对比

    PHP和NoSQL数据库都是现今非常流行的技术,前者是一种流行的服务器端编程语言,后者则是一种非关系型数据库,主要用于处理半结构化和非结构化数据。PHP和NoSQL数据库分别在不同领域得到了广泛应用,但它们之间的对…

    2023年5月19日
    03
  • PHP基于数组实现的堆栈和队列功能示例(附代码)

    堆栈和队列是数据结构的两种实现形式,是使用非常广泛的存储数据的容器。下面呢,就分别讲下这两种容器在PHP中的应用: 使用数组实现堆栈: 1、堆栈容器中,最后进栈的将会被最先出栈,即所谓的“先进后出”的数据结…

    2018年3月2日
    0216
  • php操作mysql的具体的操作流程

    链接数据库 mysql_connect(‘服务器地址’,’用户名’,’密码’); 选择数据库并设置编码 选择数据库:mysql_select_db(‘数据库名’); 设置通信编码:mysql_ query(‘set names utf8’); 准备SQL语句 发生的语句分三大类:库…

    2018年3月23日 PHP自学教程
    0218
  • PHP实现即时通讯聊天消息发送功能。

    随着互联网的不断发展,即时通讯已经成为现代社会日常沟通的主要形式,因此实现即时通讯聊天消息发送功能成为了各个网站和应用程序的必备特性。本文将介绍PHP实现即时通讯聊天消息发送功能的步骤和注意事项。一、数…

    2023年5月23日
    027

联系我们

QQ:951076433

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