搜尋
首頁後端開發php教程php之json格式控制詳解

php之json格式控制詳解

Dec 27, 2017 pm 05:58 PM
javascriptjsonphp

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
PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

您如何從PHP會話中檢索數據?您如何從PHP會話中檢索數據?May 01, 2025 am 12:11 AM

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

您如何使用會議來實施購物車?您如何使用會議來實施購物車?May 01, 2025 am 12:10 AM

利用會話構建高效購物車系統的步驟包括:1)理解會話的定義與作用,會話是服務器端的存儲機制,用於跨請求維護用戶狀態;2)實現基本的會話管理,如添加商品到購物車;3)擴展到高級用法,支持商品數量管理和刪除;4)優化性能和安全性,通過持久化會話數據和使用安全的會話標識符。

您如何在PHP中創建和使用接口?您如何在PHP中創建和使用接口?Apr 30, 2025 pm 03:40 PM

本文解釋瞭如何創建,實施和使用PHP中的接口,重點關注其對代碼組織和可維護性的好處。

crypt()和password_hash()有什麼區別?crypt()和password_hash()有什麼區別?Apr 30, 2025 pm 03:39 PM

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

如何防止PHP中的跨站點腳本(XSS)?如何防止PHP中的跨站點腳本(XSS)?Apr 30, 2025 pm 03:38 PM

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器