php json_encode() 函数格式化数据时会根据不同的数组类型格式化不同类型的json数据

索引数组时

<?php
$arr = [1,2,3,4,5];
print_r(json_encode($arr));
//输出 [1,2,3,4,5]

关联数组时

<?php
$arr = [
"name"=>"Bob",
"job"=>"IT"
];
print_r(json_encode($arr));
//输出 {"name":"Bob","job":"IT"}

空数组

<?php
$arr = [];
print_r(json_encode($arr));
//输出 []

索引数组时生成的是数组类型数据,关联数组时生成的是对象类型的数据,空数组返回的是数组类型。但是当碰到同一个字段返回的数组可能是关联数组也可能是空数组时,就会在app端出现数据类型不一致的问题,解决方式有两种:

一,使用 json_encode的 JSON_FORCE_OBJECT 模式

<?php
$arr = [];
print_r(json_encode($arr,JSON_FORCE_OBJECT));
//输出 {}

但是这种存在一个问题,它会把所有的数据都以对象的方式返回,包括索引数组:

<?php
$arr = [1,2,3,4,5,6];
print_r(json_encode($arr,JSON_FORCE_OBJECT));
//输出 {"0":1,"1":2,"2":3,"3":4,"4":5,"5":6}

二,定义空数据时使用 ArrayObject 定义而不适用  Array() 或者  []

<?php
$arr = new ArrayObject();
print_r(json_encode($arr));
//输出 {}

到这里我们可以随意的控制返回的json数据中数据的类型啦!!!!

php json_encode()函数返回对象和数组问题的更多相关文章

  1. php函数将对象转换为数组以及json_decode的使用技巧

    在写php代码的时候,发现调用接口返回的结果类型是对象,不是自己想要的数组,于是乎,写了一个将对象转化数组的函数: /** * 将对象转化为数组 */ private function objectT ...

  2. JavaScript函数、对象和数组

    一.JavaScript函数 1.定义函数:函数的通用语法如下 function function_name([parameter [, ...]]) { statements; } 由关键字func ...

  3. oracle 用函数返回对象集合

    1.先要声明全局type:并且,字段变量类型要为object,不能为record: (1)CREATE OR REPLACE TYPE "DDD_BY_DEPT_STATISTISC&quo ...

  4. Object.keys()方法 返回对象属性数组

    MDN语法 Object.keys(obj) 参数obj:要返回其枚举自身属性的对象. 返回值:一个表示给定对象的所有可枚举属性的字符串数组. 1.传入一个对象,返回的的是所有属性值 var obj2 ...

  5. 在mybatis中使用sum函数返回对象为Null

    首先大家看一下我的XML中的SQL .DAO  和实体对象 XML DAO PO 乍一看 没毛病. 但是在Mybatis中使用sum函数,如果返回值是0(就是你在Navicat中运行的的sql正常,结 ...

  6. JavaScript笔记02——基本语法(包括函数、对象、数组等)

    Doing Math & Logic Conditional & Looping Functions Objects Arrays Doing Math & Logic 1.J ...

  7. C++ 函数返回对象时并没有调用拷贝构造函数

    #include <iostream> #include <vector> #include <string.h> using namespace std; cla ...

  8. c语言 函数返回二位数组 函数参数为二维数组

    通过typedef可以简单实现.也可以直接写. 写了两个简单的矩阵操作的函数简单示例. #include <stdio.h> #include <stdlib.h> const ...

  9. html5降龙十八掌-函数,对象,数组的练习

    <script>    function x1(){ var gj={};        gj.name="侯伟东";        gj.hp=500;       ...

随机推荐

  1. postgresql 大写问题

    postgresql数据库中,表名和字段名一般用小写.如果某个用了大写,请注意,要用双引号进行标识,否则数据库不会识别.

  2. Elasticsearch服务器开发(第2版).pdf 含目录

    Elasticsearch服务器开发(第2版) 介绍: <Elasticsearch服务器开发(第2版)>这一版针对Elasticsearch的新版本更新了内容,增加了第1版中遗漏的重要内 ...

  3. html 图标和文字一行对齐

    原图: 效果图: 备注:vertical-align:middle <div> <p class="time tl-size12" style="pad ...

  4. web端调起Windows系统应用程序(exe执行文件),全面兼容所有浏览器

    1. 首先,你要有一个exe可执行文件2. 创建注册表创建注册表有两种方式(以“MyApp.exe”为例): 方式一:可视化编辑Win+R 打开运行,输入 regedit 并回车,进入注册表编辑器新建 ...

  5. [Attention Is All You Need]论文笔记

    主流的序列到序列模型都是基于含有encoder和decoder的复杂的循环或者卷积网络.而性能最好的模型在encoder和decoder之间加了attentnion机制.本文提出一种新的网络结构,摒弃 ...

  6. 常见问题:计算机网络/完整HTTP访问

    域名解析 以浏览器进行HTTP访问为例,首先搜索自身DNS缓存(一般缓存1000条左右,仅缓存1分钟),若有且未过期,结束. 若未找到,则搜索操作系统的DNS缓存. 若未找到,尝试读取hosts文件. ...

  7. Keras.NET

    [翻译]Keras.NET简介 - 高级神经网络API in C#   Keras.NET是一个高级神经网络API,它使用C#编写,并带有Python绑定,可以在Tensorflow.CNTK或The ...

  8. windows下连接mysql提示1044-access denied for root''@'localhost' to database

    ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mydb'. 原因是因为mysql数据库的user表里,存 ...

  9. jquery获取父,同,子级元素

    一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div"><a id="href_fir& ...

  10. [转帖]上云测试,这些关键点你get 到没有

    上云测试,这些关键点你get 到没有 https://www.cnblogs.com/mypm/p/10852656.html?tdsourcetag=s_pcqq_aiomsg sticky 还有s ...