1. 程式人生 > >php數組轉json對象並保留數字索引

php數組轉json對象並保留數字索引

json對象 想要 手動 索引 color 類型 ech 沒有 使用

本文要解決的問題是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對象並保留數字索引