php数组转json对象并保留数字索引
本文要解决的问题是php不带索引的数组转换为json对象(而非默认的json数组)
php中数组转json使用的方法是系统自带的:json_encode
php中数组转json的规则是:当没有指定索引时会转换为json数组,而指定了索引会转换为json对象。
那么问题来了,如果需要将一个没有索引的数组转换为json对象该怎么办,先来看下这两种情况:
1、没有指定索引的情况:
1 | $val = array ( "a" , "b" , "c" , "d" , "e" ); |
转换为json:
1 | [ "a" , "b" , "c" , "d" , "e" ] |
2、有索引的情况:
1 | $val = array ( "a" => "a" , "b" => "b" , "c" => "c" , "d" => "d" , "e" => "e" ); |
转换为json:
1 2 3 4 5 6 7 | { "a" : "a" , "b" : "b" , "c" : "c" , "d" : "d" , "e" : "e" } |
那么我们再回到第一种情况,如果在没有索引的情况下想要转换为如下的json对象:
1 2 3 4 5 6 7 | { "0" : "a" , "1" : "b" , "2" : "c" , "3" : "d" , "4" : "e" } |
有人说我们借助另一个数组来手动指定索引并转换即可解决问题:
1 2 3 4 5 | $arr = array (); $val = array ( "a" , "b" , "c" , "d" , "e" ); for ( $i =0; $i < count ( $val ); $i ++){ $arr [ '' . $i ]= $val [ $i ]; }<br> echo json_encode( $arr ); |
可实际情况是,这样并不能解决问题,输出的结果依然是json数组。
原因是:php里数组默认索引是数字0~n(取决于数组的长度),不指定索引时默认是数字序列索引,而手动指定数字序列索引和不指定索引效果是一样的。因此即使这么指定了索引,也是不管用的。
解决办法也很简单,只要打乱php默认索引规则即可!
我们只需要在$arr数组初始化时指定一个索引即可,这时php会认为该数组的索引已被用户更改,不再由系统管理。
以上代码更改为:
1 2 3 4 5 6 | $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我才渐渐的发现原来弱类型的语言才是高级语言,而强类型的语言则是傻瓜式语言。
致读者:感谢你阅读本文,请随手点击右下角的推荐或分享,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?