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我才渐渐的发现原来弱类型的语言才是高级语言,而强类型的语言则是傻瓜式语言。

原文地址:https://www.cnblogs.com/yzeng/p/8413682.html

时间: 2024-10-09 05:21:16

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

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

body { font: 12px/1.5 Tahoma, Arial, Helvetica, sans-serif } ? 偷偷的告诉你,这是一个很不谨慎就会踩得坑 ?  如下代码 (看了一下很简单,没毛病啊,老铁) $arr = array( '0'=>'a','1'=>'b','2'=>'c','3'=>'d' ); echo json_encode($arr); 但是结果是 ["a","b","c","d

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

1 <!DOCTYPE html> 2 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 6 <title>javascript里面的数组,json对象,动态添加,修改,删除示例</title> 7 <script src="http://ajax.go

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

JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是:名称/值对. 名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开: "firstName":"John" JSON 值 JSON 值可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(

php删除二维数组的空值并重新建立数字索引

<?php$arr=[0=>"p",1=>"a",2=>"b",3=>"c",4=>"",5=>"d",6=>""];$arr2=array(0=>"p",1=>"a",2=>"b",3=>"c",4=>&quo

2017/5/8总结 js数组及json(对象数组)操作

1.request获取传值问题 for (int i = 0; i < context.Request.Form.Count; i++) { //for (int i = 0; i < context.Request.Form.Keys[i] ; ) string []txtArr=context.Request.Params.GetValues(context.Request.Form.Keys[i]); for (int j = 0; j<txtArr.Length;j++ ) sb

js获取数组长度,对象成员个数字、符串字数

文章来源:百度文库 Javascript怎么得到数组长度(也就是数组的元素个数)? Javascript怎么获取对象的成员个数? 你肯定想到了array.length!? 那么我们来测试一下下面这个例子. <script type="text/javascript"> var a = []; a[50] = 50; alert(a.length); </script> 请问数组a有多少个元素, 或者换一句话说, 数组a的长度为多少? 你会告诉我长度为1, 但浏览

superobject数组添加json对象,用的是引用

1 procedure TForm1.Button1Click(Sender: TObject); 2 var 3 ja,jo: ISuperObject; 4 I: Integer; 5 begin 6 ja := SA([]); jo :=SO(); 7 jo.S['index'] := IntToStr(10); 8 9 ja.AsArray.Add(jo); 10 Memo1.Lines.Add(ja.AsString);//[{"index":"10"}]

数组转JSON对象

代码: 1 function arrayToJson(arr){ 2 var js={}; 3 for(var i=0;i<arr.length;i++){ 4 js[arr[i].name]=arr[i].value; 5 } 6 return js; 7 } 原文地址:https://www.cnblogs.com/haokan/p/12002988.html

javascript中json对象json数组json字符串互转及取值

今天用到了json数组和json对象和json类型字符串之间互转及取值,记录一下: 1.json类型的字符串转换为json对象及取值 1 var jsonString = '{"bar":"property","baz":3}'; 2 var jsObject = JSON.parse(jsonString); //转换为json对象 3 alert(jsObject.bar); //取json中的值 2.json对象转为json类型的字符串 v