ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์

Download Report

Transcript ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์

1
เพื่อรู้จักกับอาร์ เรย์ ซึ่งเป็ นชนิดข้ อมูลแบบหลายค่ า
(Compound Type) กล่ าวคือ ตัวแปรอาร์ เรย์ 1 ตัว สามารถ
เก็บค่ าหรือข้ อมูลไว้ ได้ มากกว่ า 1 ค่ าพร้ อมกัน
2
• บรรยายโดยผู้สอนและใช้ เอกสารประกอบการสอนของ
ผู้สอน
• สอนโดยใช้ ส่ือคอมพิวเตอร์ ผ่านเครื่ องฉาย
• อภิปรายในชั้นเรี ยนร่ วมกัน
่ เติมจากตาราและเอกสารทีเ่ กี่ยวข้ อง
• ให้ นิสิตค้ นคว้ าเพิม
• ทาแบบฝึ กหัดท้ ายบท
3
• ประเมินผลจากการตอบคาถามและอภิปรายในชั้นเรี ยน
• ทาแบบฝึ กหัดท้ ายบท
• ทารายงานส่ ง
4
อาร์ เรย์ (Array)คือ กลุ่มของค่ าหรือข้ อมูลที่เกี่ยวข้ องกันซึ่งถูก
จัดเก็บไว้ ภายใต้ ช่ ือตัวแปรหนึ่งๆ ข้ อมูลในอาร์ เรย์ อาจเป็ นชื่อ
นักเรียนทัง้ หมดในชัน้ รายการข้ อมูลทัง้ หมดที่ดงึ มากจากฐานข้ อมูล
ฯลฯ ซึ่งมีคาศัพท์ ท่ ตี ้ องทาความเข้ าใจ 2 คาคือ
• สมาชิก (Element) หมายถึง แต่ ละค่ า/ข้ อมูลที่เก็บอยู่ในอาร์ เรย์
• คีย์ (Key) หรื อ อินเด็กซ์ (Index) หมายถึงค่ าที่ใช้ ระบุตาแหน่ งของสมาชิกใน
อาร์ เรย์
5
ภาษา PHP อนุญาตให้ กาหนดคีย์ของอาร์ เรย์ เป็ นค่ าจานวนเต็มหรื อค่ า
สตริงก็ได้ โดยอาร์ เรย์ ท่ ีมีคีย์เป็ นค่ าจานวนเต็ม เรี ยกว่ า Numerically Indexed
Array ส่ วนอาร์ เรย์ ท่ ีมีคีย์เป็ นค่ าสตริง เรี ยกว่ า Associative
6
การสร้ าง Numeric Array (วิธีท่ ี 1)
<?
$weekdays = array(“อาทิตย์”,”จันทร์ ”,”อังคาร”,”พุธ”,”พฤหัส”,”ศุกร์ ”,”เสาร์ ”);
?>
7
การสร้ าง Numeric Array (วิธีท่ ี 2)
<?
$weekdays[0] = “อาทิตย์”;
$weekdays[1] =”จันทร์ ”;
$weekdays[2] =”อังคาร”;
$weekdays[3] =”พุธ”;
$weekdays[4] =”พฤหัส”;
$weekdays[5] =”ศุกร์ ”;
$weekdays[6] =”เสาร์ ”;
?>
8
สาหรับการสร้ าง Associative Array ก็ทาได้ ทงั ้ การใช้ คาสั่ง array และการทยอยกาหนดค่ า
ให้ แก่ ตัวแปรอาร์ เรย์ เช่ นเดียวกับ Numeric Array เพียงแต่ จะมีรูปแบบแตกต่ างไปเล็กน้ อย
<?
//สร้ าง associative Array โดยใช้ คาสัง่ Array
$weekdays2 = array(“sun” => “อาทิตย์”,“mon”
=> ”จันทร์ ”,
“tue” => ”อังคาร”,“wed” => ”พุธ”,
“thu” => ”พฤหัส”,“fri” => ”ศุกร์ ”,
“sat” => ”เสาร์ ”);
// สร้ าง associative Array โดยทยอยกาหนดค่า
ให้ แก่ตวั แปรอาร์ เรย์
$weekdays3[“sun”]=”อาทิตย์”;
$weekdays3[“mon”]=”จันทร์ ”;
$weekdays3[“tue”]=”อังคาร”;
$weekdays3[“wed”]=”พุธ”;
$weekdays3[“thu”]=”พฤหัสบดี”;
$weekdays3[“fri”]=”ศุกร์ ”;
$weekdays3[“sat”]=”เสาร์ ”;
?>
9
การสร้ าง Associative Array ด้ วยคาสั่ง array นัน้ ต้ องกาหนดคีย์และ
ข้ อมูลของแต่ ละสมาชิกโดยใช้ รูปแบบคีย์ => ข้ อมูล
ตัวอักษรที่อยู่ระหว่ างคีย์กับข้ อมูล คือ เครื่ องหมายเท่ ากับ ( = ) และ
เครื่ องหมายมากกว่ า ( > ) พิมพ์ ตดิ กัน
หมายเหตุ
Associative Array อาจมีคีย์เป็ นค่าสตริงปนกับค่าจานวนเต็มก็ได้ เช่น
$fruits = array (‘app’ => ‘แอปเปิ ล้ ’ , 3 => ‘ส้ ม’,
12 => ‘สัปปะรด’ , ‘mgo’ => ‘มะม่วง’);
10
เมื่อต้ องการเข้ าถึงสมาชิกใดของอาร์ เรย์ ให้ พมิ พ์ ช่ ือตัวแปรอาร์ เรย์
ตามด้ วยวงเล็บก้ ามปู [ ] โดยระบุคีย์ของสมาชิกนัน้ ไว้ ภายในวงเล็บ
เช่ น
Echo $weekdays[1]; คือการแสดงค่ าของสมาชิกที่มีคีย์เท่ ากับ 1 ของ
อาร์ เรย์ $weekdays ออกมา
หมายเหตุ
สาหรับ Numeric Array ที่ PHP กาหนดคีย์ให้ เองนั ้น สมาชิกที่มีคีย์เท่ากับ 1 จะเป็ นสมาชิกลาดับ
ที่ 2 ของอาร์ เรย์ เนื่องจาก PHP กาหนดคีย์ของสมาชิกตัวแรกเป็ น 0 เสมอ
11
การทางานกับอาร์ เรย์ ท่ มี ักต้ องทาอยู่บ่อยครั ง้ ก็คือการเข้ าถึงทุกๆ สมาชิกของ
อาร์ เรย์ เพื่อดาเนินการอย่ างใดอย่ างหนึ่งกับสมาชิกแต่ ละตัว PHP มีคาสั่ง
foreach ซึ่งเป็ นคาสั่งสาหรั บทาซา้ หรื อวนลูปอีกคาสั่งหนึ่ง คาสั่งนีใ้ ช้ ทางานกับ
อาร์ เรย์ โดยจะวนลูปเป็ นจานวนรอบเท่ ากับจานวนสมาชิกของอาร์ เรย์ และใน
แต่ ละรอบจะช่ วยให้ เข้ าถึงสมาชิกหนึ่งๆ ของอาร์ เรย์ ได้ อย่ างสะดวก
รูปแบบ
foreach(arr_expr as $key=>$value)
statement
12
<?
$products=array("T001"=>"ลูกฟุตบอล",
"T002"=>"ลูกบาส",
"T003"=>"ลูกตะกร้ อ",
"B001"=>"ลกเทสนิส",
"C001"=>"ลูกปิ งปอง",
);
echo '<table border="1" width="100%">'; //เปิ ดตาราง
echo "<tr><th>รหัสสินค้ า</th><th>ชื่อสินค้ า
</th></tr>"; // หัวตาราง
//วนลูปเพื่อเข้ าถึงข้ อมูลทั ้งหมดในอาร์ เรย์ $products
foreach($products as $key=>$value)
{
echo "<tr><td>{$key}</td><td>{$value}</td></tr>";
//แถวข้ อมูลของตาราง
}
echo "</table>"; //ปิ ดตาราง
?>
13
สมมติว่าต้ องการแสดงข้ อมูลของสมาชิกต่ างๆ ใน Numeric Array
ออกมาตามลาดับของคีย์จากน้ อยไปหามาก โดยใช้ foreach ดังนี ้
$letters[0]=’A’;
$letters[1]=’B’;
$letters[3]=’C’;
$letters[2]=’D’;
Foreach($letters as $letter){
Echo $letter;
}
14
เพื่อให้ แน่ ใจว่ าการเข้ าถึงสมาชิกของ Numeric Array จะเป็ นไปตามลาดับความน้ อย-มาก
ของคีย์ จะต้ องใช้ คาสั่ง for แทน foreach ตัวอย่ างนีจ้ ะให้ ผลลัพธ์ เป็ น ABCD ตามต้ องการ
$letters[0]=’A’;
$letters[1]=’B’;
$letters[3]=’C’;
$letters[2]=’D’;
//ใช้ ฟังก์ชนั่ count หา (นับ) จานวนสมาชิกของอาร์ เรย์ $letters
$n = count($letters);
//วนลูปตั ้งแต่ I เป็ น 0 จนถึง n-1 เมื่อ n คือจานวนสมาชิกของอาร์ เรย์
For ($i=0;$i<$n;$i++)
{
Echo $letters[$i];
}
15
อาร์ เรย์ หลายมิติ หรื อพูดง่ ายๆ คืออาร์ เรย์ ท่ มี ีสมาชิกเป็ นอาร์ เรย์ นัน้ จะมี
ประโยชน์ เมื่อต้ องการเก็บข้ อมูลที่มีโครงสร้ างซับซ้ อนมากกว่ ารู ปแบบ “ 1 คีย์
ต่ อ 1 ข้ อมูล”
T0001
T0004
T0005
P0001
B0001
ABC
: Pooh’s Musical
599
2400
1690
9800
550
Party
16
$product = array(
“T0001” => array(“name” => “ลูกฟุตบอล”,”price”=> 599),
“T002” => array(“name” => “ลูกบาส”,”price”=> 2400),
“T003” => array(“name” => “ลูกตะกร้ อ”,”price”=> 500),
“B001” => array(“name” => “ลูกเทสนิส”,”price”=>599),
“C001” => array(“name” => “ลูกปิ งปอง”,”price”=> 2000)
);
17
<?
$products=array("T0001" => array("name" => "บล้ อคหยอดหมีพหู ์","price" => 599),
"T0004" => array("name" => "ตุ๊กตากบสอน ABC","price" => 2400),
"T0005" => array("name" => "โต๊ ะกิจกรรม","price" => 1690),
"P0001" => array("name" => "กระดานลื่นสุขสันต์","price" => 9800),
"B0001" => array("name" => "หนังสือมีเสียง: Pooh's Musical Party","price" => 550)
);
echo $products["T0001"]["price"]."<br>";
echo $products["P0001"]["name"]."<br>";
echo "<pre>";
print_r($products["B0001"]);//ใช้ วงเล็บก้ ามปูชดุ เดียว จะได้ ค่าเป็ นอาร์ เรย์ชั ้นใน
echo "</pre>";
?>
18
การเข้ าถึงอาร์ เรย์ หลายมิติ ให้ ใส่ วงเล็บก้ ามปูต่อท้ ายชื่อตัวแปรอาร์ เรย์ ตงั ้ แต่
1 ชุดขึน้ ไป วงเล็บก้ ามปูแต่ ละชุดจะทาให้ สามารถเข้ าถึงอาร์ เรย์ แต่ ละชัน้ ที่ลึก
ลงไปจากอาร์ เรย์ ชัน้ นอกสุด
19
ให้ ใช้ คาสั่ง foreach หรือ for ซ้ อนกันเป็ นจานวนชัน้ เท่ ากับจานวนมิตขิ องอาร์ เรย์ เพื่อเข้ าถึง
ข้ อมูลทัง้ หมดของอาร์ เรย์ หลายมิติ ดังตัวอย่ าง
<?
$products=array(
"T0001" => array("name" => "บล้ อคหยอดหมีพหู ์","price" => 599),
"T0004" => array("name" => "ตุ๊กตากบสอน ABC","price" => 2400),
"T0005" => array("name" => "โต๊ ะกิจกรรม","price" => 1690),
"P0001" => array("name" => "กระดานลื่นสุขสันต์","price" => 9800),
"B0001" => array("name" => "หนังสือมีเสียง: Pooh's Musical Party","price"
=> 550)
);
echo '<table border="1" width="100%">';
echo "<tr><th>รหัสสินค้ า</th><th>ชื่อสินค้ า</th><th>ราคา</th></tr>";
foreach($products as $key=>$value1)
{ //ตัวแปร $value จะเป็ นอาร์ เรย์
echo "<tr><td>{$key}</td>"; //แสดงรหัสสินค้ า ซึง่ เป็ นคีย์ของ
อาร์ เรย์ชนนอก
ั้
//วนลูปเพื่อแสดงข้ อมูลของอาร์ เรย์ชนใน
ั ้ ข้ อมูลแรกคือชื่อสินค้ า
ข้ อมูลที่สองคือ ราคาสินค้ า
foreach($value1 as $key2 => $value2){
echo "<td>{$value2}</td>";
}
echo "</tr>";
}
echo "</table>";
?>
20
ตัวอย่ างต่ อไปนีจ้ ะใช้ ลูป for 2 ชัน้ อ่ านข้ อมูลใน Numeric Array 2 มิตอิ อกมา
แสดงผล
<?
$test = array(array(1,2,3,4),array(5,6,7,8), array(9,10,11,12));
for($i=0;$i<3;$i++){
echo "<b>แถวที่ " . ($i+1).":</b>";
for($j=0;$j<4;$j++){
echo $test[$i][$j];
if ($j<3) echo ". ";
}
echo "<br>";
}
?>
21
• ฟั งก์ ช่ ัน array_push
เพิ่มข้ อมูลใหม่ เข้ าไปตอนปลายของอาร์ เรย์ (เพิ่มข้ อมูลต่ อท้ ายอาร์ เรย์ )
array_push(อาร์ เรย์,ข้ อมูลที่จะเพิ่มสูอ่ าร์ เรย์)
ตัวอย่ างนีจ้ ะเพิ่มค่ าสตริง “แก้ วมังกร” และ “มะเฟื อง” เข้ าไปในอาร์ เรย์ $fruits ซึ่งจะ
ทาให้ อาร์ เรย์ $fruits มีสมาชิกเพิ่มขึน้ มาอีก 2 ตัว
array_push($fruits,”แก้ วมังกร”,”มะเฟื อง”);
22
• ฟั งก์ ช่ ัน array_pop
ลบสมาชิกตัวสุดท้ ายของอาร์ เรย์ แล้ วให้ ค่าเป็ นข้ อมูลของสมาชิกตัวนัน้
array_pop(อาร์ เรย์)
ตัวอย่ างนีจ้ ะลบสมาชิกตัวสุดท้ ายของอาร์ เรย์ $fruits ทิง้ ไป แล้ วอ่ านข้ อมูลของ
สมาชิกตัวนัน้ มาเก็บไว้ ในตัวแปร $last_element
$last_element = array_pop($fruits);
23
• ฟั งก์ ช่ ัน array_unshift
เพิ่มข้ อมูลใหม่ เข้ าไปตอนต้ นของอาร์ เรย์
Array_unshift(อาร์ เรย์,ข้ อมูลที่จะเพิ่มเข้ าสูอ่ าร์ เรย์)
• ฟั งก์ ช่ ัน array_shift
ลบสมาชิกตัวแรกของอาร์ เรย์ แล้ วส่ งคืนค่ าของสมาชิกตัวนัน้ กลับมา
Array_shift(อาร์ เรย์)
24
• ฟั งก์ ช่ ัน array_merge
รับอาร์ เรย์ 2 ชุดเข้ ามาเป็ นอาร์ กวิ เมนต์ แล้ วให้ ค่าเป็ นอาร์ เรย์ ใหม่ ท่ ีเกิดจากการรวม
อาร์ เรย์ ทงั ้ สองนัน้ เข้ าด้ วยกัน
Array_merge(อาร์ เรย์,อาร์ เรย์)
เช่ น
$combined_array=Array_merge($fruits,$vegetables);
25
• ฟั งก์ ช่ ัน array_keys
ให้ ค่าเป็ น Numeric Array ที่มีข้อมูลเป็ นคีย์ของอาร์ เรย์ ท่ กี าหนด
Array_keys(อาร์ เรย์)
• ฟั งก์ ช่ ัน array_values
ให้ ค่าเป็ น Numeric Array ที่มีข้อมูลเป็ นข้ อมูลของอาร์ เรย์ ท่ กี าหนด
Array_values(อาร์ เรย์)
26
<?
$fruits=array('app'=>'แอปเปิ ล้ ', 3=>'ส้ ม' , 12=>'สับปะรด' ,'mgo'=>'มะม่วง');
//ดึงคีย์ของอาร์ เรย์ $fruits มาสร้ างเป็ นอาร์ เรย์ $keys
$keys = array_keys($fruits);
//ดึงข้ อมของอาร์ เรย์ $fruits มาสรางเป็ นอาร์ เรย์ $values
$values = array_values($fruits);
echo '<table border="0" width="100%">';
echo '<tr><td>$fruits<hr></td><td>$keys<hr></td><td>$values<hr></td></tr>';
echo "<tr><td><pre>";
print_r($fruits);
echo "</pre></td>";
echo "<td><pre>";
print_r($keys);
echo "</pre></td>";
echo "<td><pre>";
print_r($values);
echo "</pre></td></tr>";
echo "</table>"
?>
27
• ฟั งก์ ช่ ัน sort และ rsort
ใช้ เรี ยงลาดับข้ อมูลในอาร์ เรย์ จากน้ อยไปมาก และจากมากไปน้ อย
ตามลาดับ ฟั งก์ ช่ ันทัง้ สองจะกาหนดคีย์ใหม่ เป็ นค่ าจานวนเต็ม ตัง้ แต่ 0 ให้ กับ
อาร์ เรย์ โดยไม่ สนใจคีย์เดิม
หมายเหตุ
ฟั งก์ชนั่ ต่างๆเกี่ยวกับการเรี ยงลาดับอาร์ เรย์ จะรับอาร์ เรย์เข้ ามาเป็ นอาร์ กิวเมนต์แล้ วจัดเรี ยงข้ อมูล
ในอาร์ เรย์นั ้นโดยตรง เนื่องจากอาร์ เรย์ถกู ส่งผ่านโดยการอ้ างอิง (pass-by-reference) ส่วนค่าที่
ฟั งก์ชนั่ ส่งคืนออกไปจะบอกให้ ร้ ูว่าการทางานของมันสาเร็จหรื อล้ มเหลว (คืนค่า TRUE ถ้ าสาเร็จ
และคืนค่า FALSE ถ้ าล้ มเหลว)
28
<?
$fruits=array('app'=>'แอปเปิ ล้ ', 3=>'ส้ ม' , 12=>'สับปะรด' ,'mgo'=>'มะม่วง');
sort($fruits);//เรี ยงลาดับข้ อมูลในอาร์ เรย์ $fruits
echo "<pre>";
print_r($fruits);//แสดงคีย์และข้ อมูลในอาร์ เรย์ $fruits ออกมา
echo "</pre>";
?>
29
• ฟั งก์ ช่ ัน asort และ arsort
ใช้ เรียงลาดับข้ อมูลในอาร์ เรย์ จากน้ อยไปมาก และจากมากไปน้ อย ตามลาดับ
โดยรักษาคีย์เดิมของข้ อมูลไว้
• ฟั งก์ ช่ ัน ksort krsort
ใช้ เรียงลาดับข้ อมูลในอาร์ เรย์ ตามค่ าของคีย์จากน้ อยไปมาก และจากมากไปน้ อย
ตามลาดับ
30
• อาร์ เรย์ (Array) คือกลุ่มของค่ าหรื อข้ อมูลที่เกี่ยวข้ องกันซึ่งถูกจัดเก็บไว้ ภายใต้ ช่ ือตัวแปร
•
•
•
•
หนึ่งๆ ดังนัน้ ตัวแปรอาร์ เรย์ จึงเป็ นตัวแปรที่สามารถเก็บค่ าไว้ ได้ มากกว่ า 1 ค่ า พร้ อมกัน
อาร์ เรย์ ในภาษา PHP แบ่ งออกเป็ น 2 รู ปแบบ คือ Numerically Indexed Array (หรื อเรี ยก
ง่ ายๆว่ า Numeric Array) กับ Associative Array โดย Numeric Array หมายถึง อาร์ เรย์ ท่ มี ีคีย์
เป็ นค่ าจานวนเต็ม ซึ่ง PHP จะกาหนดคีย์ให้ กับแต่ ละสมาชิกโดยอัตโนมัตเิ ริ่มจากศูนย์ ส่ วน
Associative Array หมายถึงอาร์ เรย์ ท่ มี ีคีย์เป็ นค่ าชนิดใดก็ได้ (มักเป็ นค่ าสตริง) โดยที่กาหนด
ความสัมพันธ์ ระหว่ างคีย์กับข้ อมูลเอง
การสร้ างอาร์ เรย์ ทาได้ 2 วิธี คือ การใช้ คาสั่ง array และการทยอยกาหนดค่ าให้ แก่ ตัวแปร
อาร์ เรย์ ในช่ วงเขียนโปรแกรม
คาสั่ง foreach ช่ วยให้ การเข้ าถึงสมาชิกทัง้ หมดของอาร์ เรย์ มีความสะดวกมากขึน้ โดยแต่ ละ
รอบที่วนลูปจะเป็ นการเข้ าถึงสมาชิกหนึ่งๆ ของอาร์ เรย์
อาร์ เรย์ หลายมิติ (Multi-Dimensional Array) คือ อาร์ เรย์ ท่ มี ีสมาชิกเป็ นอาร์ เรย์
31
32