JSON以其高效能的傳輸與解析,得以在資料傳輸中廣泛應用。本文主要介紹了深入淺析php json 格式控制的相關資料。希望對大家有幫助。
關於json 這個問題,陸陸續續有新手朋友找我問,例如為什麼我輸出的是{"1":"item1","2":"item2","3":"item3 "} 而非["item1","item2","item3"]。
php陣列 與 js陣列
#我這裡用 php 5.4 以上語法表示。
php 裡有關聯數組和索引數組,例如:
<?php // 索引数组 $arr = ['item1', 'item2', 'item3']; // 关联数组 $arr = [ 'name' => '张三', 'age' => '22', ];
而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 => 'item1', 2 => 'item2', 3 => 'item3', ]; echo "输出对象: ", json_encode($arr), "\n"; // 输出对象: {"1":"item1","2":"item2","3":"item3"} $arr = [ // 连续索引,输出数组 0 => 'item1', 1 => 'item2', 2 => 'item3', ]; echo "输出数组: ", json_encode($arr), "\n"; // 输出数组: ["item1","item2","item3"] $arr = [ // 连续索引,输出数组 'item1', 'item2', 'item3', ]; echo "输出数组: ", json_encode($arr), "\n"; // 输出数组: ["item1","item2","item3"] $arr = [ // 索引不连续,输出对象 0 => 'item1', 1 => 'item2', 2 => 'item3', 5 => 'item5', ]; echo "输出对象: ", json_encode($arr), "\n"; // 输出对象: {"0":"item1","1":"item2","2":"item3","5":"item5"} $arr = [ // 包含关联索引,一定输出对象 0 => 'item1', 1 => 'item2', 2 => 'item3', 'other' => '其他字段' ]; echo "输出对象: ", json_encode($arr), "\n"; // 输出对象: {"0":"item1","1":"item2","2":"item3","other":"\u5176\u4ed6\u5b57\u6bb5"} // 关联数组 + 索引数组 实例 $arr = [ // 关联数组 'other' => '其他字段', 'count' => 3, // 数组个数 'list' => [ // 索引数组 'item1', 'item2', 'item3', ], ]; 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] = [ 'name' => $val['name'], 'age' => $val['age'], ]; } $list['count'] = 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['list'][] = [ // 修改这里 'name' => $val['name'], 'age' => $val['age'], ]; } $list['count'] = count($arr); // 其他属性 echo json_encode($list); // 输出 json // {"list":[{"name":"zhangsan","age":22},{"name":"lisi","age":25}],"count":2}
#相關推薦:
以上是php之json格式控制詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!