本文要解決的問題是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我才漸漸的發現原來弱類型的語言才是高級語言,而強類型的語言則是傻瓜式語言。