本文要解决的问题是php不带索引的数组转换为json对象(而非默认的json数组)

php中数组转json使用的方法是系统自带的:json_encode

php中数组转json的规则是:当没有指定索引时会转换为json数组,而指定了索引会转换为json对象。

那么问题来了,如果需要将一个没有索引的数组转换为json对象该怎么办,先来看下这两种情况:

1、没有指定索引的情况:

$val = array("a","b","c","d","e");

转换为json:

["a","b","c","d","e"]

2、有索引的情况:

$val = array("a"=>"a","b"=>"b","c"=>"c","d"=>"d","e"=>"e");

转换为json:

{
"a": "a",
"b": "b",
"c": "c",
"d": "d",
"e": "e"
}

那么我们再回到第一种情况,如果在没有索引的情况下想要转换为如下的json对象:

{
"0": "a",
"1": "b",
"2": "c",
"3": "d",
"4": "e"
}

有人说我们借助另一个数组来手动指定索引并转换即可解决问题:

 $arr = array();
$val = array("a","b","c","d","e");
for($i=0;$i<count($val);$i++){
$arr[''.$i]=$val[$i];
}
 echo json_encode($arr);

可实际情况是,这样并不能解决问题,输出的结果依然是json数组。

原因是:php里数组默认索引是数字0~n(取决于数组的长度),不指定索引时默认是数字序列索引,而手动指定数字序列索引和不指定索引效果是一样的。因此即使这么指定了索引,也是不管用的。

解决办法也很简单,只要打乱php默认索引规则即可!

我们只需要在$arr数组初始化时指定一个索引即可,这时php会认为该数组的索引已被用户更改,不再由系统管理。

以上代码更改为:

 $arr = array(1=>0);
$val = array("a","b","c","d","e");
for($i=0;$i<count($val);$i++){
$arr[''.$i]=$val[$i];
}
 echo json_encode($arr);

请注意标红的代码,有了这个初始化,后面循环里的代码才能按照我们预想的结果去执行。

php数组使用远不止这些技巧和要点,还需要大家努力去发现。

ps:仔细研究了php和js我才渐渐的发现原来弱类型的语言才是高级语言,而强类型的语言则是傻瓜式语言。

php数组转json对象并保留数字索引的更多相关文章

  1. javascript里面的数组,json对象,动态添加,修改,删除示例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. PHP 多维数组转json对象

    PHP 多维数组转json对象 php 数组转json对象,可能大家都知道要用json_encode,但是转换出来的格式多有不同,此处做个小小的记录! 1. 一维数组转json对象 <?php ...

  3. json 中关于json数组跟json对象的区别

    原文地址:http://blog.csdn.net/lafengwnagzi/article/details/52789171 JSON 是存储和交换文本信息的语法 JSON 文本格式在语法上与创建 ...

  4. JSON数组,JSON对象,数组的区别与基本操作整理

    JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是: ...

  5. artTemplate--使用artTemplate时,由于json对象属性有数字命名格式 导致调用报错 syntax error

    案例 今天在使用artTemplate做开发时,遇到一个比较奇葩的问题,就是使用json对象去获取值得时候,报如下错误: Template Error <temp> function an ...

  6. 关于json_encode转数组为json对象时里有数组格式数据的问题

    前言:这次是给一款小程序提供接口时发现的 别的不多说,下面直接看出现问题的json数据 可以看到,这是一个大的json对象,是由多维数组组成,一般api接口提供的也是这种格式. 但是仔细看红框中的内容 ...

  7. PHP中json_encode()使用须知,JSON数组和JSON对象

    ⊰ 偷偷的告诉你,这是一个很不谨慎就会踩得坑 ⊱  如下代码 (看了一下很简单,没毛病啊,老铁) $arr = array( '0'=>'a','1'=>'b','2'=>'c',' ...

  8. android JSONArray JSONObject 字符串转json数组 遍历json对象

    String json = "{''data'':[{''name'':''Wallace''},{''name'':''Grommit''}]}"; StringBuffer m ...

  9. Vue+SpringBoot后端接收包含单属性和List数组的json对象

    这次主要是针对springboot后台接收的json中包含多对象(如List数组/单属性)所写的一篇文章.虽然网上类似情况很多,尝试了一个晚上,都没有解决问题,最后还是在师兄的帮助下完美解决. vue ...

随机推荐

  1. java项目中获取文件路径的几种方法

    // 第一种: 2 File f = new File(this.getClass().getResource("/").getPath()); // 结果: /Users/adm ...

  2. day04-Linux系统中用户控制及文件权限管理方法

    一. useradd指令新建一个用户包含以下文件 1. 用户信息文件:less   /etc/passwd                                                ...

  3. weekly contest 116

    961. N-Repeated Element in Size 2N Array In a array A of size 2N, there are N+1 unique elements, and ...

  4. webpack4 入门(二)

    一.管理输出 1.多入口配置 entry: { index1: './src/index.js', index2: './src/index2.js' }, output: { filename: ' ...

  5. MyBatis的使用步骤及配置

    1.导入mybatis的jar包:mybatis-x.x.x.jar 2.使用XML配置mybatis,创建SqlSessionFactory XML配置文件的名称通常为mybatis-config. ...

  6. 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得

    [bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1)  就好 ...

  7. 关于cuda拷贝的速度测试

    由于没有使用profiler,仅仅通过简单的传输函数测试,如下测试了10000个点,1000000个点,100000000个点的速度: 均按时钟周期来计时,通过MAX调整数据 int main(){ ...

  8. HDU6315 Naive Operations(多校第二场1007)(线段树)

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  9. 20. js继承的6种方式

    想要继承,就必须要提供个父类(继承谁,提供继承的属性) 一.原型链继承 重点:让新实例的原型等于父类的实例. 特点: 1.实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性.( ...

  10. CRF++使用步骤

    1.将CRF++文件的压缩包解压后添加到java的工程目录下 2.使用前必须生成train.data和test.data 文件并放到crf_learn.exe的同级目录下 3.cmd进入目标位置,其中 ...