首頁  >  文章  >  後端開發  >  php之json格式控制詳解

php之json格式控制詳解

*文
*文原創
2017-12-27 17:58:461633瀏覽

JSON以其高效能的傳輸與解析,得以在資料傳輸中廣泛應用。本文主要介紹了深入淺析php json 格式控制的相關資料。希望對大家有幫助。

關於json 這個問題,陸陸續續有新手朋友找我問,例如為什麼我輸出的是{"1":"item1","2":"item2","3":"item3 "} 而非["item1","item2","item3"]。

php陣列 與 js陣列

#我這裡用 php 5.4 以上語法表示。

php 裡有關聯數組和索引數組,例如:


#
<?php
// 索引数组
$arr = [&#39;item1&#39;, &#39;item2&#39;, &#39;item3&#39;];
// 关联数组
$arr = [
 &#39;name&#39; => &#39;张三&#39;,
 &#39;age&#39; => &#39;22&#39;,
];


而js裡面只有一種數組,那就是索引數組,也許你會說可以用K/V 鍵值對形式模擬關聯數組啊。

 K/V 鍵值物件看起來像,但他沒有任何陣列特性,這裡就不詳細說明了。

而上面的php 陣列json_encode 後面得到的json 格式分別是["item1","item2","item3"] 和{"name":"\u5f20\u4e09","age ":"22"}。這裡的中文被轉為Unicode 了,如果你非要顯示中文,php 5.4 之後支援JSON_UNESCAPED_UNICODE 參數,json_encode($arr, JSON_UNESCAPED_UNICODE) 即可得到{"name":"張三","age":"22" },不過非常不推薦這樣寫。

這裡分別得到的是js 下的陣列和物件格式的json 字串,那為什麼會產生這兩種類型,或者說,什麼情況會產生物件格式,什麼情況會產生數組格式呢。

php 陣列 輸出格式控制

#大致上幾種情況我都列出來了,直接看程式碼。


<?php
$arr = [ // 不是 0 开始,会输出对象
 1 => &#39;item1&#39;,
 2 => &#39;item2&#39;,
 3 => &#39;item3&#39;,
];
echo "输出对象: ", json_encode($arr), "\n";
// 输出对象: {"1":"item1","2":"item2","3":"item3"}
$arr = [ // 连续索引,输出数组
 0 => &#39;item1&#39;,
 1 => &#39;item2&#39;,
 2 => &#39;item3&#39;,
];
echo "输出数组: ", json_encode($arr), "\n";
// 输出数组: ["item1","item2","item3"]
$arr = [ // 连续索引,输出数组 
 &#39;item1&#39;,
 &#39;item2&#39;,
 &#39;item3&#39;,
];
echo "输出数组: ", json_encode($arr), "\n";
// 输出数组: ["item1","item2","item3"]
$arr = [ // 索引不连续,输出对象
 0 => &#39;item1&#39;,
 1 => &#39;item2&#39;,
 2 => &#39;item3&#39;,
 5 => &#39;item5&#39;,
];
echo "输出对象: ", json_encode($arr), "\n";
// 输出对象: {"0":"item1","1":"item2","2":"item3","5":"item5"}
$arr = [ // 包含关联索引,一定输出对象
 0 => &#39;item1&#39;,
 1 => &#39;item2&#39;,
 2 => &#39;item3&#39;,
 &#39;other&#39; => &#39;其他字段&#39;
];
echo "输出对象: ", json_encode($arr), "\n";
// 输出对象: {"0":"item1","1":"item2","2":"item3","other":"\u5176\u4ed6\u5b57\u6bb5"}
// 关联数组 + 索引数组 实例
$arr = [ // 关联数组
 &#39;other&#39; => &#39;其他字段&#39;,
 &#39;count&#39; => 3, // 数组个数
 &#39;list&#39; => [ // 索引数组
  &#39;item1&#39;,
  &#39;item2&#39;,
  &#39;item3&#39;,
 ],
];
echo "对象+数组: ", json_encode($arr), "\n";
// 对象+数组: {"other":"\u5176\u4ed6\u5b57\u6bb5","count":3,"list":["item1","item2","item3"]}


其實第一種就是許多新手朋友常遇到的問題。

 因為資料庫讀出來後他們喜歡把 id 當索引用,而資料庫的 id 不是從 0 開始的,看下這個範例。


$arr = $User->where($where)->find(); // 读取数据
$list = [];
foreach($arr as $key => $val) { // 遍历数组
 $list[$key] = [
  &#39;name&#39; => $val[&#39;name&#39;],
  &#39;age&#39; => $val[&#39;age&#39;],
 ];
}
$list[&#39;count&#39;] = count($arr); // 其他属性
echo json_encode($list); // 输出 json
// {"1":{"name":"zhangsan","age":22},"2":{"name":"lisi","age":25},"count":2}


而最後一種是比較常用的寫法,自訂欄位和陣列一起用,來修改下剛才範例。


$arr = $User->where($where)->find(); // 读取数据
$list = [];
foreach($arr as $key => $val) { // 遍历数组
 $list[&#39;list&#39;][] = [ // 修改这里
  &#39;name&#39; => $val[&#39;name&#39;],
  &#39;age&#39; => $val[&#39;age&#39;],
 ];
}
$list[&#39;count&#39;] = count($arr); // 其他属性
echo json_encode($list); // 输出 json
// {"list":[{"name":"zhangsan","age":22},{"name":"lisi","age":25}],"count":2}



#相關推薦:

PHP解決JSON中文顯示問題

#php轉換索引數組為json

php中json_encode的使用範例介紹

以上是php之json格式控制詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn