อ่านข้อมูล Array จาก JSON ไฟล์ ด้วย PHP
2010-05-20 Games 18,120ในไฟล์ JSON มีการเก็บข้อมูลในแบบ Array ด้วยเหมือนกัน ซึ่งเมื่่อตอนที่แล้วเราได้ดูวิธีการเรียกใช้ข้อมูลใน JSON ไฟล์แบบโดยตรงมาแล้ว
สำหรับวันนี้เราจะมาดูวิธีในการเรียกใช้ข้อมูลใน JSON ไฟล์ที่มีการเก็บข้อมูลแบบ Array ไว้นะครับ
ไฟล์ data3.json
{ "controls": [ [ "fire", "na" ], [ "jump", "na" ], [ "movement", "mouse" ] ], "tags": [ "sudoku", "sudoku 24", "puzzle", "puzzles", "puzzlepond" ], "category": "Puzzles", "control_scheme": "{\"fire\": \"na\", \"jump\": \"na\", \"movement\": \"mouse\"}" }
จากด้านบนข้อมูลที่อยู่ในรูปแบบ Array คือข้อมูลที่อยู่ใน [ ] ครับ มาดู code php กัน มาดูวิธีแบบเข้าถึงข้อมูลโดยตรง
<? $json = file_get_contents('data3.json'); $data = json_decode($json); for ($i=0;$i<3;$i++){ $x1 = $data->controls[$i][0]; $x2 = $data->controls[$i][1]; echo $x1."=".$x2; echo "<br />"; } /* แสดงผลออกมาดังนี้ fire=na jump=na movement=mouse */ ?>
อีกวิธีเป็นการแปลงข้อมูลใน JSON ให้อยู่ในรูปแบบ Array ของ PHP ก่อนนำไปใช้งานอีกทีครับ
<? function json_code ($json) { //remove curly brackets to beware from regex errors เป็นฟังชั่นสำหรับแปรข้อมูลแบบ JSON ออกมาอยู่ในรูปแบบ Array ครับ $json = substr($json, strpos($json,'{')+1, strlen($json)); $json = substr($json, 0, strrpos($json,'}')); $json = preg_replace('/(^|,)([\\s\\t]*)([^:]*) (([\\s\\t]*)):(([\\s\\t]*))/s', '$1"$3"$4:', trim($json)); return json_decode('{'.$json.'}', true); } $test1 = file_get_contents('data3.json'); // อ่านข้อมูล JSON $jarr = json_code($test1); // แปลงข้อมูล JSON ให้อยู่ในรูปแบบ Array print_r($jarr); // ให้พิมพ์ค่า Array ออกมาดู /* แสดงผลออกมาดังนี้ Array ( [controls] => Array ( [0] => Array ( [0] => fire [1] => na ) [1] => Array ( [0] => jump [1] => na ) [2] => Array ( [0] => movement [1] => mouse ) ) [tags] => Array ( [0] => sudoku [1] => sudoku 24 [2] => puzzle [3] => puzzles [4] => puzzlepond ) [category] => Puzzles [control_scheme] => {"fire": "na", "jump": "na", "movement": "mouse"} ) */ echo "<br />"; while (list($key) = each($jarr)) { // ทำการ list ค่า key ของ Array ทั้งหมดออกมา echo "=================<br />"; echo "$key <BR />"; echo "================="; echo "<br />"; $count = count($jarr[$key]); // นับจำนวนแถวที่เก็บไว้ใน Array ใน key นั้นๆ if ($count>1){ for ($i=0;$i<$count;$i++) { echo $jarr[$key][$i]; // พิมพ์ค่าที่ถูกเก็บไว้ในแต่ละแถวของ key นั้นๆ echo "<br />"; } } else { echo $jarr[$key]; // กรณีค่าที่เก็บไว้มีเพียงค่าเดียว echo "<br />"; } } /* แสดงผลออกมาดังนี้ ================= controls ================= Array Array Array ================= tags ================= sudoku sudoku 24 puzzle puzzles puzzlepond ================= category ================= Puzzles ================= control_scheme ================= {"fire": "na", "jump": "na", "movement": "mouse"} */ ?>
จะเห็นได้ว่าใน controls ค่าที่ถูกเก็บไว้เป็น Array อีกทีหนึ่ง เมื่อสั่งพิมพ์ค่าออกมาจึงยังไม่แสดงผลที่ถูกต้อง
หมายเหตุ
อ่านเพิ่มเติมความเข้าใจเกี่ยวกับ Array ใน PHP ได้ที่ www.worldphp.com
Array, JSON, PHP | PHP