php数组转json对象并保留数字索引
本文要解决的问题是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对象并保留数字索引的更多相关文章
- javascript里面的数组,json对象,动态添加,修改,删除示例
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- PHP 多维数组转json对象
PHP 多维数组转json对象 php 数组转json对象,可能大家都知道要用json_encode,但是转换出来的格式多有不同,此处做个小小的记录! 1. 一维数组转json对象 <?php ...
- json 中关于json数组跟json对象的区别
原文地址:http://blog.csdn.net/lafengwnagzi/article/details/52789171 JSON 是存储和交换文本信息的语法 JSON 文本格式在语法上与创建 ...
- JSON数组,JSON对象,数组的区别与基本操作整理
JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是: ...
- artTemplate--使用artTemplate时,由于json对象属性有数字命名格式 导致调用报错 syntax error
案例 今天在使用artTemplate做开发时,遇到一个比较奇葩的问题,就是使用json对象去获取值得时候,报如下错误: Template Error <temp> function an ...
- 关于json_encode转数组为json对象时里有数组格式数据的问题
前言:这次是给一款小程序提供接口时发现的 别的不多说,下面直接看出现问题的json数据 可以看到,这是一个大的json对象,是由多维数组组成,一般api接口提供的也是这种格式. 但是仔细看红框中的内容 ...
- PHP中json_encode()使用须知,JSON数组和JSON对象
⊰ 偷偷的告诉你,这是一个很不谨慎就会踩得坑 ⊱ 如下代码 (看了一下很简单,没毛病啊,老铁) $arr = array( '0'=>'a','1'=>'b','2'=>'c',' ...
- android JSONArray JSONObject 字符串转json数组 遍历json对象
String json = "{''data'':[{''name'':''Wallace''},{''name'':''Grommit''}]}"; StringBuffer m ...
- Vue+SpringBoot后端接收包含单属性和List数组的json对象
这次主要是针对springboot后台接收的json中包含多对象(如List数组/单属性)所写的一篇文章.虽然网上类似情况很多,尝试了一个晚上,都没有解决问题,最后还是在师兄的帮助下完美解决. vue ...
随机推荐
- spark(3) - scala独立编程
>>非集成: 环境需要 * spark 2.4.0 * scala 2.11.12 * sbt (打包) 开发过程 1.shell命令下创建项目目录结构 *****/ project / ...
- 与HDFS交互- By java API编程
环境(ubuntu下) jdk eclipse jar(很烦,整了很久才清楚) - 导包方法 查看:https://www.cnblogs.com/floakss/p/9739030.html ()” ...
- UITouch
触摸事件基本都是发生在 viewController 中,首先触摸的对象是视图,而视图的类 UIView 继承了 UIRespnder 类,但是要对事件作出处理,还需要重写 UIResponder 类 ...
- 编译原理-First集和Follow集
刚学first集和follow集的时候,如果上课老师没有讲明白或者自己没听明白,自己看的时候还真是有点难理解,不过结合着具体的题目可以理解的更快. 先看一下两种集合的求法: First集合的求法: ...
- New Distinct Substrings(后缀数组)
New Distinct Substrings(后缀数组) 给定一个字符串,求不相同的子串的个数.\(n<=50005\). 显然,任何一个子串一定是后缀上的前缀.先(按套路)把后缀排好序,对于 ...
- Codeforces Round #335 (Div. 2) A
A. Magic Spheres time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- c#缓存帮助类
public static class CacheHelper { static object _lockObj = new object(); private static Dictionary&l ...
- linux输入输出及vim管理
一.理解系统的输入输出 输入输出系统是计算机重要组成部分,是沟通计算机与外界的桥梁. 二.管理输入输出的符号 1.输出重定向 > ##重定向正确输出 ...
- 汉诺塔问题hdu 2065——找规律
这类题目就是纸上模拟,找规律. 问题描述:在一块铜板上有三根杆,目的是将最左边杆上的盘全部移到右边的杆上,条件是不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允 ...
- mc04_IntelliJ IDEA常用设置
字体设置 File --> Settings --> Font 项目编码设置 File --> Settings --> File Encodings 项目依赖 即一个项目引用 ...