深入理解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 相关文章推荐
hadoop常见错误以及处理方法详解
Jun 19 PHP
php合并js请求的例子
Nov 01 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
php生成QRcode实例
Sep 22 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
PHP中->和=>的意思
Mar 31 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实现的MySQL数据浏览器
2007/03/11 PHP
php递归列出所有文件和目录的代码
2008/09/10 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
Python序列操作之进阶篇
2016/12/08 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
Python set常用操作函数集锦
2017/11/15 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
Python Flask框架扩展操作示例
2019/05/03 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
servlet面试题
2012/08/20 面试题
国贸专业的职业规划书
2014/03/15 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
MySQL系列之二 多实例配置
2021/07/02 MySQL