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. WPF分析工具

    分析WPF程序是理解其行为很重要的一步,市场上有大量现成的WPF程序分析工具,如Snoop,WPFPerf,Perforator和Visual Profiler,其中Perforator和Visual ...

  2. 品优购商城项目(三)安全框架SpringSecurity

    品优购商城项目第三阶段 1.springSecurity的基本用法与shiro类似. 2.BCrypt加密算法比MD5更加智能和安全,能自动加盐再加密,生成的密码是60位比md5的32位更占空间(可以 ...

  3. C/C++代码静态分析工具调研

    C/C++代码静态分析工具调研 摘自:https://www.jianshu.com/p/92886d979401 简述 静态分析(static analysis)是指在不执行代码的情况下对其进行分析 ...

  4. 如何让winrar5压缩的文件能用低版本winrar打开

    https://jingyan.baidu.com/article/39810a2348ab24b636fda681.html 在压缩文件格式选项处点选[RAR4]选项,即之前版本的winrar支持的 ...

  5. 改进初学者的PID-采样时间

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  6. SqlServer触发器常用语法AFTER、INSTEAD OF及其详解

    先创建一个简单的触发器 CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR | AFTER | INSTEAD OF [DE ...

  7. windows server 2012 r2 无法安装 .net 3.5

    服务器需安装SQL 2012 ,因需安装.net3.5,没有想到2012出于安全竟然不让手动安装,对于源文件也是把控比较严,折腾了好一会儿才解决问题 有参才一下powershell等安装命令,均失败. ...

  8. circRNA数据库的建立

      circRNA数据库的建立 wget http://circbase.org/download/human_hg19_circRNAs_putative_spliced_sequence.fa.g ...

  9. [转帖]Linux内核系统体系概述

    Linux内核系统体系概述 https://www.cnblogs.com/alantu2018/p/8447369.html Linux 内核主要由 5 个模块构成,它们分别是: 进程调度模块 用来 ...

  10. LinkedList源码解析(JDK8)

    ArrayList的增删效率低,但是改查效率高. 而LinkedList正好相反,增删由于不需要移动底层数组数据,其底层是链表实现的,只需要修改链表节点指针,所以效率较高. 而改和查,都需要先定位到目 ...