(实用篇)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日

相关推荐

  • 在PHP中实现微信公众号素材库分类管理

    随着微信公众号的普及和使用,越来越多的企业和个人开始使用微信公众号来进行宣传和推广。微信公众号中的素材库是企业和个人进行宣传和推广的重要工具之一。然而,素材库中的素材种类繁多,管理起来比较困难。本文…

    2023年5月18日
    00
  • PHP使用Memcache技术,提升网站性能的秘诀。

    随着互联网的不断发展,网站的访问量日益增加,而各种高并发的情况也随之出现。这时候,网站性能就变得尤为重要。为了能够提升网站的性能,各种技术手段也应运而生。其中,PHP结合Memcache技术是提升网站性能的一种…

    2023年5月21日
    01
  • 今日分享html对接数据库。

    HTML 本身是一种标记语言,用于创建网页的结构和内容,它并不直接提供与数据库连接的功能,因为这通常涉及到服务器端脚本和数据处理,比如使用 PHP、ASP.NET、Node.js 等后端技术,我可以向您展示如何使用这些后端…

    2024年6月23日
    00
  • PHP中的多线程操作指南。

    PHP是一种普及广泛的脚本语言,被广泛应用于Web开发领域。在处理复杂、高并发的Web系统时,多线程操作是非常重要的技术手段。本文将为大家介绍PHP中的多线程操作指南,希望对PHP开发者有所帮助。一、为什么要使用多…

    2023年5月23日
    00
  • php获取一些时间实现方法(附代码)

    这几天在开发的时候遇到的一些时间上的问题,整理了一下,分享给大家,可以看看,有需要的话可以利用一下。 1.获取上个月第一天及最后一天. echo date('Y-m-01', strtotime('-1 month')); echo "<br/>"; echo…

    2018年4月25日
    0181
  • php+redis实现对200w用户的即时推送服务

    怎么实现对200w用户的即时推送,这个推送可以理解为调用第三方的接口,push,sms之类的东西。当时先写了一个demo 直接读取DB然后单个推送,结果。。。。可想而知于是设计一套基于redis+php多进程的方案,用着还不…

    2022年6月21日
    0122
  • if判断杜绝手误造成的bug

    在代码时有可能会出出运算符写错的现象,if判断中经常出现的是把 "=="写成 "=", 那么if($length=4)就会一直返回true,运行代码会就会出现一些末知的bug或是另一种结果. 怎么预防手误造成的bug? 我们可以把值写在 == …

    2018年4月27日
    0433
  • PHP中的HTTP请求和响应头。

    在Web开发中,HTTP请求和响应头是非常重要的概念。它们提供了在客户端和服务器之间传输数据的标准化机制。PHP作为一门流行的Web编程语言,自然也支持HTTP请求和响应。HTTP请求头是客户端(例如浏览器)发送给服务器…

    2023年5月28日
    05

联系我们

QQ:951076433

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