ภาษาพีเอชพี/ประเภทของตัวแปร/Arrays
เนื้อหา |
Array [แก้ไข]
อาเรย์ (Arrays) ตือตัวแปรที่เก็บค่าในลักษณของกลุ่มของข้อมูล โดยการจับคู่ระหว่าง ดัชนี (index, key) => ค่า (value)
รูปแบบการใช้งาน [แก้ไข]
การสร้าง array ใน PHP นั้นมีด้วยกัน 2 รูปแบบ
กำหนดค่าด้วย array() [แก้ไข]
array( key => value
, ...
)
// key จะเป็น integer หรือ string อย่างใดอย่างหนึ่ง
// value เป็นค่าชนิดอะไรก็ได้
$arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // 1
โดย key นั้นอาจจะเป็น integer หรือ string อย่างใดอย่างหนึ่ง ถ้า key มีรูปแบบเหมือน integer ก็จะถูกแปลเป็น integer
- ถ้า key เป็น "9" ก็จะแปลเป็น 9, แต่ถ้าเป็น "09" จะแปลเป็น "09" (string)
หากใส่เป็น float จะถูกตัดเป็น integer แทน โดย indexed-array และ associative-array นั้นใน PHP ถือว่าเหมือนกัน จึงทำให้สามารถมี key ได้ทั้งแบบ integer และ string ใน array ตัวเดียว
<?php $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42)); echo $arr["somearray"][6]; // 5 echo $arr["somearray"][13]; // 9 echo $arr["somearray"]["a"]; // 42 ?>
ถ้าหากไม่มีการกำหนด key ให้กับค่าแล้ว key ของค่านั้นคือค่าสูงสุดของ integer key บวกด้วย 1 และถ้ามีการกำหนดค่าให้ key ซัำค่าใหม่จะเขียนทับค่าเก่า
<?php // สอง array นี้มีค่าเท่ากัน array(5 => 43, 32, 56, "b" => 12); array(5 => 43, 6 => 32, 7 => 56, "b" => 12); // จะมีการเขียนทับถ้า key ซ้ำกัน $arr = array(1 => 2, 40, 50, 70, 2 => 30); echo $arr[2]; // outputs: 30 ?>
ใช้ TRUE เป็น key จะเท่ากับใช้ integer 1 หากใช้ FALSE จะเท่ากับใช้ 0 ถ้าหากใช้ NULL จะเท่ากับใช้ empty string
- array และ object ไม่สามารถใช้เป็น key ได้
การกำหนดค่าและแก้ไขค่าด้วย วงเล็บใหญ่ [] [แก้ไข]
array ที่ประกาศแล้วสามารถแก้ไขค่าได้
$arr[key] = value; $arr[] = value; // key จะเป็น integer หรือ string อย่างใดอย่างหนึ่ง // value เป็นค่าชนิดอะไรก็ได้
ถ้าหาก $arr ยังไม่ได้สร้างขึ้นก็จะได้รับการสร้างขึ้น
<?php $arr = array(5 => 1, 12 => 2); $arr[] = 56; // แบบนี้เหมือนการใช้ $arr[13] = 56; // ณ จุดนี้ของโค๊ด $arr["x"] = 42; // เป็นการเพิ่ม element ใหม่ใส่ใน array โดยมี key "x" unset($arr[5]); // ลบ element นี้ออกจาก array unset($arr); // ลบ array ทิ้งไปเลย ?>
โดยถ้าหากเราล้างข้อมูลแล้วเหลือตัว array ไว้โดยไม่ re-index ตัว array แล้ว integer key จะต่อจากค่าสูงสุดเดิมก่อนล้างข้อมูล
<?php // สร้าง array ใหม่ $array = array(1, 2, 3, 4, 5); print_r($array); // ลบทุก element เหลือไว้แต่ตัว array : foreach ($array as $i => $value) { unset($array[$i]); } print_r($array); // เพิ่ม element เข้าไปใหม่ (key คือ 5 ไม่ใช่ 0) $array[] = 6; print_r($array); // จัดดัชนีใหม่(Re-index): $array = array_values($array); $array[] = 7; print_r($array); ?>
Outputs:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
)
Array
(
[5] => 6
)
Array
(
[0] => 6
[1] => 7
)
array หลายมิติ [แก้ไข]
array หลายมิติจะว่าคล้าย array ซ้อน array ก็ใช่ ดูจากตัวอย่างจะเข้าใจง่ายกว่า
<?php $fruits = array ( "fruits" => array ( "a" => "orange", "b" => "banana", "c" => "apple" ), "numbers" => array ( 1, 2, 3, 4, 5, 6 ), "holes" => array ( "first", 5 => "second", "third" ) ); // ตัวอย่างการระบบุที่อยู่ของ array แบบ multi-dimension echo $fruits["holes"][5]; // prints "second" echo $fruits["fruits"]["a"]; // prints "orange" unset($fruits["holes"][0]); // remove "first" // สร้าง multi-dimensional array ตัวใหม่ขึ้น $juices["apple"]["green"] = "good"; ?>
ทำไม $foo[bar] ถึงผิด [แก้ไข]
<?php $foo[bar] = 'enemy'; echo $foo[bar]; // etc ?>
การทำแบบนี้มันผิด แต่ว่า สามารถใช้งานได้ ที่ผิดเนื่องจากไม่มีการใส่เครื่องหมายที่ทำให้ bar เป็น string ก็เลยทำให้ PHP ไปมองหา constant ที่ชื่อ bar ก่อน แต่ที่สามารถทำงานได้เนื่องจาก เมื่อ PHP ไม่สามารถหาตัวแปรชื่อนั้น ๆ ได้จะทำการแปลงให้เป็น string แทน(ก็คือเป็น 'bar' แทน bar)
การแปลงเป็น array [แก้ไข]
ถ้าแปลง integer, string, float, boolean, resource จะเป็น array หนึ่ง element โดยมี key เป็น 0 และเก็บค่าตัวแปรนั้นไว้ หรือจะบอกได้ว่า (array)$scalarValue เหมือน array($scalarValue) นั้นเอง
แปลงจาก object ผลที่ได้คือ element ของ array ก็ได้จาก property ของ object โดยชื่อตัวแปรจะเป็น key
แปลง NULL จะมีค่าเท่ากับ empty array
การเปรียบเทียบ array กับ array [แก้ไข]
สามารถเทียบได้โดยใช้ array_diff() หรือใช้ array operator
ตัวอย่างเพิ่มเติม [แก้ไข]
ใน PHP นั้น array นั้นมีสามารถใช้งานให้เกิดประโยชน์ได้มากมาย
<?php // การทำแบบนี้ $a = array( 'color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 'name' => 'apple', 4 // key จะเป็น 0 ); $b = array('a', 'b', 'c'); // มีค่าเหมือนการทำแบบนี้ $a = array(); $a['color'] = 'red'; $a['taste'] = 'sweet'; $a['shape'] = 'round'; $a['name'] = 'apple'; $a[] = 4; // key will be 0 $b = array(); $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // After the above code is executed, $a will be the array // array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round', // 'name' => 'apple', 0 => 4), and $b will be the array // array(0 => 'a', 1 => 'b', 2 => 'c'), or simply array('a', 'b', 'c'). ?>
<?php // Array เป็น (property-)map $map = array( 'version' => 4, 'OS' => 'Linux', 'lang' => 'english', 'short_tags' => true ); // ใช้รูปแบบ number index $array = array( 7, 8, 0, 156, -10 ); // มีค่าเท่ากับ array(0 => 7, 1 => 8, ...) $switching = array( 10, // key = 0 5 => 6, 3 => 7, 'a' => 4, 11, // key = 6 (ค่า integer index สูงสุดคือ 5) '8' => 2, // key = 8 (integer!) '02' => 77, // key = '02' 0 => 12 // ค่า 10 จะถูกเขียนทับ 12 ); // empty array $empty = array(); ?>
สามารถคัดลอก array ได้ด้วยการใช้ reference operator (ในที่นี้คือ &)
<?php $arr1 = array(2, 3); $arr2 = $arr1; $arr2[] = 4; // $arr2 is changed, // $arr1 is still array(2, 3) $arr3 = &$arr1; // จะเท่ากับให้ $arr3 เป็นตัวเดียวกันกับ $arr1 (เนื่องจากให้ $arr3 ไปชี้ตำแหน่ง memory เดียวกันกับ $arr1) $arr3[] = 4; // เป็นการกำหนดค่าให้ $arr1 ด้วย echo $arr1[0]; // output: 2 echo $arr1[1]; // output: 3 echo $arr1[2]; // output: 4 ?>