深入理解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 表单数据的获取代码
Mar 10 PHP
有关php运算符的知识大全
Nov 03 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
destoon官方标签大全
Jun 20 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
再论Javascript下字符串连接的性能
2011/03/05 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
python常用知识梳理(必看篇)
2017/03/23 Python
python写入文件自动换行问题的方法
2019/07/05 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
数据库面试要点基本概念
2013/10/31 面试题
轻化专业学生实习自我鉴定
2013/09/20 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
2014年母亲节寄语
2014/05/07 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
秋季运动会开幕词
2015/01/28 职场文书
房屋维修申请报告
2015/05/18 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
Python道路车道线检测的实现
2021/06/27 Python
python异步的ASGI与Fast Api实现
2021/07/16 Python
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL