深入理解PHP JSON数组与对象


Posted in PHP onJuly 19, 2016

在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数组与对象,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP 远程关机实现代码
Nov 10 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
php伪静态之APACHE篇
Jun 02 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
php生成年月日下载列表的方法
Apr 24 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
PHP链表操作简单示例
Oct 15 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 #PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 #PHP
PHP中set_include_path()函数相关用法分析
Jul 18 #PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 #PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 #PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 #PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 #PHP
You might like
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
php获取远程文件大小
2015/10/20 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python操作列表之List.insert()方法的使用
2015/05/20 Python
python中常用的九种预处理方法分享
2016/09/11 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
Python理解递归的方法总结
2019/01/28 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
python批量修改文件名的示例
2020/09/27 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
软件缺陷的分类都有哪些
2014/08/22 面试题
国际经济贸易专业推荐信
2013/11/06 职场文书
大学生入党自传2015
2015/06/26 职场文书
干部考核工作总结2015
2015/07/24 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python
python中对列表的删除和添加方法详解
2022/02/24 Python
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle