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 ...
随机推荐
- java 学习第二篇关系运算符和布尔值
关系运算符,顾名思义.用来看什么关系.(也就是用来比较) 看下表 JAVA 关系运算符 a=6,b=5 关系运算符 举例 值 解释 > a>b true a大于b < a<b ...
- 小程序开发笔记【二】,抽奖结果json数据拼装bug解决
抽奖结果数据json格式数据拼接bug,如下图,只发布了两个奖项,每个奖项设置2个奖品,但最后拼接数据的时候出现3个奖项 json数据格式如下 "luckyResult":[ { ...
- Binder学习笔记(三)—— binder客户端是如何组织checkService数据的
起点从TestClient.cpp的main函数发起: int main() { sp < IServiceManager > sm = defaultServiceManager(); ...
- ubuntu - 14.04,如何操作Gnome的任务栏?
搜索到的答案: in gnome classic you must press both the Alt & Super keys at the same time while right-c ...
- 【探讨】linux环境,执行重启了php后php.ini依然不生效
背景: 一个linux环境配置了多个php版本的环境,同时修改了多个php.ini,执行service php-fpm restart 之后,依然不生效 原因: 没有设置好启动php.ini 参考链接 ...
- P1891 疯狂LCM
\(\color{#0066ff}{ 题目描述 }\) 众所周知,czmppppp是数学大神犇.一天,他给众蒟蒻们出了一道数论题,蒟蒻们都惊呆了... 给定正整数N,求LCM(1,N)+LCM(2,N ...
- P1630 求和
题意:求$\sum_{i=1}^a i^b,a,b\le 10^9$ 暴力只有30分QAQ(本数学蒟蒻当然想不到正解啦) 正解:模数很小,不难(?)想到$i^a%10000=(i+b)^a %1000 ...
- 5分钟构建无服务图片鉴黄web应用(基于FunctionGraph)
函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.即使在一些复杂的web应用场景中,函数工作流也能发挥出令人 ...
- Boost lockfree deque 生产者与消费者多对多线程应用
boost库中有一个boost::lockfree::queue类型的 队列,对于一般的需要队列的程序,其效率都算不错的了,下面使用一个用例来说明. 程序是一个典型的生产者与消费者的关系,都可以使用多 ...
- java 数据库连接
一.JDBC(Java Database Connectivity) JDBC是Java语言中访问数据库的应用程序接口,可以为多种关系数据库提供统一访问. jdbc.properties jdbc.d ...