深入理解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 相关文章推荐
资料注册后发信小技巧
Oct 09 PHP
PHP-MySQL教程归纳总结
Jun 07 PHP
优化PHP代码技巧的小结
Jun 02 PHP
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
解析php入库和出库
Jun 25 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
php异步多线程swoole用法实例
Nov 14 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
PHP批斗大会之缺失的异常详解
Jul 09 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
简析Python的闭包和装饰器
2016/02/26 Python
python爬虫实现中英翻译词典
2019/06/25 Python
django-allauth入门学习和使用详解
2019/07/03 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
python 实现有道翻译功能
2021/02/26 Python
党委书记岗位职责
2013/11/24 职场文书
学生会竞聘书范文
2014/03/31 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
Python基础之条件语句详解
2021/06/16 Python
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android