php之json格式控制詳解

*文
發布: 2023-03-18 17:10:02
原創
1557 人瀏覽過

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

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

php陣列 與 js陣列

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

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


#
 '张三', '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 陣列 輸出格式控制

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


 '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轉換索引數組為json

php中json_encode的使用範例介紹

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!