圖片來源:Jonathan Weatherhead |
在php中我們常常會用陣列來處理資料,但在網頁資料傳遞的過程中,我們常常需要將資料從一端傳到另一端(例如,從伺服器端傳到客戶端),這時候我們就需要一些共通的格式來方便包裝資料和解讀資料,而JSON格式就是現在相當常用的一種(如果還不清楚什麼是JSON格式,可以參考這篇:[筆記] JavaScript中物件(object)和JSON格式的轉換)。
那麼,我們就來說明一下,要怎麼在php中將資料從陣列轉換成JSON格式吧!
當陣列索引值和元素都是英文的情況---json_encode
我們先建立一個陣列如下:
在資料都是英文的情況下,要將陣列轉成JSON格式非常的容易,只要使用php內建的函式json_encode就可達到,像是這樣:
這時候你就可以看到我們原本陣列的資料已經被轉換成JSON格式了:
程式範例
<? $data_array_en = [ "1" => "Apple", "2" => "HTC", "3" => "Samsung", "4" => "ASUS", "5" => "Sony" ]; $data_json_en = json_encode($data_array_en); echo $data_json_en; ?>
當陣列當中包含中文的情況
看起來要把陣列轉成JSON似乎非常的容易,然而,當我們的資料包含中文,就會碰到一些問題...。
我們同樣的先建立一個陣列:
然後一樣直接透過json_encode來轉換資料:
這時候,會發現轉出來竟然變成一堆亂碼...
這時候我們可以怎麼做呢?
解法
這時候不必慌張,解法是這樣子的,如果中文會讓json_encode出現亂碼,那就先將資料透過urlencode讓字串當中不會有中文出現,再轉成JSON格式,最後再用urldecode把資料轉回成中文格式。
程序如下:
如果不清楚foreach的使用,可參考[筆記] PHP & MySQL 透過foreach來呼叫出陣列的值。
這時候,即使我們的資料裡面有包含中文字,一樣可以順利轉換成JSON:
程式範例
$data_array = [ "北部" => "臺北", "北部" => "桃園", "中部" => "台中", "南部" => "台南", "南部" => "高雄", "東部" => "花蓮", ]; // 先利用urlencode讓陣列中沒有中文 foreach($data_array as $key => $value){ $new_data_array[urlencode($key)] = urlencode($value); } // 利用json_encode將資料轉成JSON格式 $data_json_url = json_encode($new_data_array); // 利用urldecode將資料轉回中文 $data_json = urldecode($data_json_url); echo $data_json;
包裝成function來使用吧!
如果很常會使用到把陣列轉成JSON的話,我們就把它包成一個Function來使用吧!只需要把function拷貝到程式當中,在參數的地方帶入欲轉換的成JSON的陣列就可以了!
程式碼
$data_array = [ "北部" => "臺北", "北部" => "桃園", "中部" => "台中", "南部" => "台南", "南部" => "高雄", "東部" => "花蓮", ]; function array_to_json($sel_array){ foreach($sel_array as $key => $value){ if(is_string($key) || is_string($value)) { $new_array[urlencode($key)] = urlencode($value); } } return urldecode(json_encode($new_array)); } echo array_to_json($data_array);
延伸閱讀
[筆記] JavaScript中物件(object)和JSON格式的轉換[筆記] PHP & MySQL 透過foreach來呼叫出陣列的值
0 意見:
張貼留言