深入理解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下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
PHP实现的简易版图片相似度比较
Jan 07 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
分享php邮件管理器源码
Jan 06 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
php读取本地json文件的实例
Mar 07 PHP
Yii框架安装简明教程
May 15 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
php win下Socket方式发邮件类
2009/08/21 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
python实现小球弹跳效果
2019/05/10 Python
Python中遍历列表的方法总结
2019/06/27 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
python重要函数eval多种用法解析
2020/01/14 Python
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
党支部组织生活会整改方案
2014/09/30 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
画展邀请函
2015/01/31 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
Flink 侧流输出源码示例解析
2022/09/23 Servers