ภาษาพีเอชพี/ประเภทของตัวแปร/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
?>