320 likes | 427 Views
บทที่ 10 ( Array ). PHP: Hypertext Preprocessor. สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร. วัตถุประสงค์การเรียนรู้ประจำบท.
E N D
บทที่ 10 (Array) PHP:Hypertext Preprocessor สัญญา เครือหงษ์ ภาควิชาวิทยาการคอมพิวเตอร์และเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยนเรศวร
วัตถุประสงค์การเรียนรู้ประจำบทวัตถุประสงค์การเรียนรู้ประจำบท เพื่อรู้จักกับอาร์เรย์ ซึ่งเป็นชนิดข้อมูลแบบหลายค่า (Compound Type) กล่าวคือ ตัวแปรอาร์เรย์ 1 ตัว สามารถเก็บค่าหรือข้อมูลไว้ได้มากกว่า 1 ค่าพร้อมกัน
กิจกรรมการเรียนการสอนกิจกรรมการเรียนการสอน • บรรยายโดยผู้สอนและใช้เอกสารประกอบการสอนของผู้สอน • สอนโดยใช้สื่อคอมพิวเตอร์ผ่านเครื่องฉาย • อภิปรายในชั้นเรียนร่วมกัน • ให้นิสิตค้นคว้าเพิ่มเติมจากตำราและเอกสารที่เกี่ยวข้อง • ทำแบบฝึกหัดท้ายบท
การประเมินผล • ประเมินผลจากการตอบคำถามและอภิปรายในชั้นเรียน • ทำแบบฝึกหัดท้ายบท • ทำรายงานส่ง
พื้นฐานเกี่ยวกับอาร์เรย์ในภาษา PHP อาร์เรย์ (Array)คือ กลุ่มของค่าหรือข้อมูลที่เกี่ยวข้องกันซึ่งถูกจัดเก็บไว้ภายใต้ชื่อตัวแปรหนึ่งๆ ข้อมูลในอาร์เรย์อาจเป็นชื่อนักเรียนทั้งหมดในชั้น รายการข้อมูลทั้งหมดที่ดึงมากจากฐานข้อมูล ฯลฯ ซึ่งมีคำศัพท์ที่ต้องทำความเข้าใจ 2 คำคือ • สมาชิก (Element) หมายถึง แต่ละค่า/ข้อมูลที่เก็บอยู่ในอาร์เรย์ • คีย์ (Key) หรือ อินเด็กซ์ (Index) หมายถึงค่าที่ใช้ระบุตำแหน่งของสมาชิกในอาร์เรย์
Numerically Indexed Array กับ Associative Array ภาษา PHP อนุญาตให้กำหนดคีย์ของอาร์เรย์เป็นค่าจำนวนเต็มหรือค่าสตริงก็ได้ โดยอาร์เรย์ที่มีคีย์เป็นค่าจำนวนเต็ม เรียกว่า Numerically Indexed Array ส่วนอาร์เรย์ที่มีคีย์เป็นค่าสตริง เรียกว่า Associative
การสร้างอาร์เรย์ การสร้าง Numeric Array (วิธีที่ 1) <? $weekdays = array(“อาทิตย์”,”จันทร์”,”อังคาร”,”พุธ”,”พฤหัส”,”ศุกร์”,”เสาร์”); ?>
การสร้างอาร์เรย์ การสร้าง Numeric Array (วิธีที่ 2) <? $weekdays[0] = “อาทิตย์”; $weekdays[1] =”จันทร์”; $weekdays[2] =”อังคาร”; $weekdays[3] =”พุธ”; $weekdays[4] =”พฤหัส”; $weekdays[5] =”ศุกร์”; $weekdays[6] =”เสาร์”; ?>
การสร้าง Associative Array สำหรับการสร้าง 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”]=”เสาร์”; ?>
การสร้าง Associative Array การสร้าง Associative Array ด้วยคำสั่ง array นั้น ต้องกำหนดคีย์และข้อมูลของแต่ละสมาชิกโดยใช้รูปแบบคีย์ => ข้อมูล ตัวอักษรที่อยู่ระหว่างคีย์กับข้อมูล คือ เครื่องหมายเท่ากับ ( = ) และเครื่องหมายมากกว่า ( > ) พิมพ์ติดกัน หมายเหตุ Associative Array อาจมีคีย์เป็นค่าสตริงปนกับค่าจำนวนเต็มก็ได้ เช่น $fruits = array (‘app’ => ‘แอปเปิ้ล’ , 3 => ‘ส้ม’, 12 => ‘สัปปะรด’ , ‘mgo’ => ‘มะม่วง’);
การเข้าถึงสมาชิกของอาร์เรย์การเข้าถึงสมาชิกของอาร์เรย์ เมื่อต้องการเข้าถึงสมาชิกใดของอาร์เรย์ ให้พิมพ์ชื่อตัวแปรอาร์เรย์ ตามด้วยวงเล็บก้ามปู [ ] โดยระบุคีย์ของสมาชิกนั้นไว้ภายในวงเล็บ เช่น Echo $weekdays[1];คือการแสดงค่าของสมาชิกที่มีคีย์เท่ากับ 1 ของอาร์เรย์ $weekdays ออกมา หมายเหตุ สำหรับ Numeric Array ที่ PHP กำหนดคีย์ให้เองนั้น สมาชิกที่มีคีย์เท่ากับ 1 จะเป็นสมาชิกลำดับที่ 2 ของอาร์เรย์ เนื่องจาก PHP กำหนดคีย์ของสมาชิกตัวแรกเป็น 0 เสมอ
การวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์การวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์ การทำงานกับอาร์เรย์ที่มักต้องทำอยู่บ่อยครั้ง ก็คือการเข้าถึงทุกๆ สมาชิกของอาร์เรย์ เพื่อดำเนินการอย่างใดอย่างหนึ่งกับสมาชิกแต่ละตัว PHP มีคำสั่ง foreachซึ่งเป็นคำสั่งสำหรับทำซ้ำหรือวนลูปอีกคำสั่งหนึ่ง คำสั่งนี้ใช้ทำงานกับอาร์เรย์ โดยจะวนลูปเป็นจำนวนรอบเท่ากับจำนวนสมาชิกของอาร์เรย์ และในแต่ละรอบจะช่วยให้เข้าถึงสมาชิกหนึ่งๆ ของอาร์เรย์ได้อย่างสะดวก รูปแบบ foreach(arr_expr as $key=>$value) statement
การวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์การวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์ <? $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>"; //ปิดตาราง ?>
วนลูปเพื่อเข้าถึงสมาชิกของ Numeric Array ด้วยคำสั่ง for สมมติว่าต้องการแสดงข้อมูลของสมาชิกต่างๆ ใน Numeric Array ออกมาตามลำดับของคีย์จากน้อยไปหามาก โดยใช้ foreachดังนี้ $letters[0]=’A’; $letters[1]=’B’; $letters[3]=’C’; $letters[2]=’D’; Foreach($letters as $letter){ Echo $letter; }
วนลูปเพื่อเข้าถึงสมาชิกของ Numeric Array ด้วยคำสั่ง for เพื่อให้แน่ใจว่าการเข้าถึงสมาชิกของ 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]; }
การสร้างอาร์เรย์หลายมิติการสร้างอาร์เรย์หลายมิติ อาร์เรย์หลายมิติ หรือพูดง่ายๆ คืออาร์เรย์ที่มีสมาชิกเป็นอาร์เรย์นั้น จะมีประโยชน์เมื่อต้องการเก็บข้อมูลที่มีโครงสร้างซับซ้อนมากกว่ารูปแบบ “ 1 คีย์ต่อ 1 ข้อมูล”
การสร้างอาร์เรย์หลายมิติการสร้างอาร์เรย์หลายมิติ $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) );
การเข้าถึงสมาชิกของอาร์เรย์หลายมิติการเข้าถึงสมาชิกของอาร์เรย์หลายมิติ <? $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>"; ?>
การเข้าถึงสมาชิกของอาร์เรย์หลายมิติการเข้าถึงสมาชิกของอาร์เรย์หลายมิติ การเข้าถึงอาร์เรย์หลายมิติ ให้ใส่วงเล็บก้ามปูต่อท้ายชื่อตัวแปรอาร์เรย์ตั้งแต่ 1 ชุดขึ้นไป วงเล็บก้ามปูแต่ละชุดจะทำให้สามารถเข้าถึงอาร์เรย์แต่ละชั้นที่ลึกลงไปจากอาร์เรย์ชั้นนอกสุด
การวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์หลายมิติการวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์หลายมิติ ให้ใช้คำสั่ง foreachหรือ for ซ้อนกันเป็นจำนวนชั้นเท่ากับจำนวนมิติของอาร์เรย์ เพื่อเข้าถึงข้อมูลทั้งหมดของอาร์เรย์หลายมิติ ดังตัวอย่าง echo "<tr><td>{$key}</td>"; //แสดงรหัสสินค้า ซึ่งเป็นคีย์ของ อาร์เรย์ชั้นนอก //วนลูปเพื่อแสดงข้อมูลของอาร์เรย์ชั้นใน ข้อมูลแรกคือชื่อสินค้า ข้อมูลที่สองคือ ราคาสินค้า foreach($value1 as $key2 => $value2){ echo "<td>{$value2}</td>"; } echo "</tr>"; } echo "</table>"; ?> <? $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 จะเป็นอาร์เรย์
การวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์หลายมิติการวนลูปเพื่อเข้าถึงสมาชิกทั้งหมดของอาร์เรย์หลายมิติ ตัวอย่างต่อไปนี้จะใช้ลูป 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>"; } ?>
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ • ฟังก์ชั่นarray_push เพิ่มข้อมูลใหม่เข้าไปตอนปลายของอาร์เรย์ (เพิ่มข้อมูลต่อท้ายอาร์เรย์) ตัวอย่างนี้จะเพิ่มค่าสตริง “แก้วมังกร” และ “มะเฟือง” เข้าไปในอาร์เรย์ $fruits ซึ่งจะทำให้อาร์เรย์ $fruits มีสมาชิกเพิ่มขึ้นมาอีก 2 ตัว array_push(อาร์เรย์,ข้อมูลที่จะเพิ่มสู่อาร์เรย์) array_push($fruits,”แก้วมังกร”,”มะเฟือง”);
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ • ฟังก์ชั่น array_pop ลบสมาชิกตัวสุดท้ายของอาร์เรย์ แล้วให้ค่าเป็นข้อมูลของสมาชิกตัวนั้น ตัวอย่างนี้จะลบสมาชิกตัวสุดท้ายของอาร์เรย์ $fruits ทิ้งไป แล้วอ่านข้อมูลของสมาชิกตัวนั้นมาเก็บไว้ในตัวแปร $last_element array_pop(อาร์เรย์) $last_element = array_pop($fruits);
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ • ฟังก์ชั่น array_unshift เพิ่มข้อมูลใหม่เข้าไปตอนต้นของอาร์เรย์ • ฟังก์ชั่น array_shift ลบสมาชิกตัวแรกของอาร์เรย์ แล้วส่งคืนค่าของสมาชิกตัวนั้นกลับมา Array_unshift(อาร์เรย์,ข้อมูลที่จะเพิ่มเข้าสู่อาร์เรย์) Array_shift(อาร์เรย์)
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ • ฟังก์ชั่น array_merge รับอาร์เรย์ 2 ชุดเข้ามาเป็นอาร์กิวเมนต์ แล้วให้ค่าเป็นอาร์เรย์ใหม่ที่เกิดจากการรวมอาร์เรย์ทั้งสองนั้นเข้าด้วยกัน เช่น Array_merge(อาร์เรย์,อาร์เรย์) $combined_array=Array_merge($fruits,$vegetables);
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ • ฟังก์ชั่น array_keys ให้ค่าเป็น Numeric Array ที่มีข้อมูลเป็นคีย์ของอาร์เรย์ที่กำหนด • ฟังก์ชั่น array_values ให้ค่าเป็น Numeric Array ที่มีข้อมูลเป็นข้อมูลของอาร์เรย์ที่กำหนด Array_keys(อาร์เรย์) Array_values(อาร์เรย์)
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ <? $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>" ?>
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ • ฟังก์ชั่น sort และ rsort ใช้เรียงลำดับข้อมูลในอาร์เรย์จากน้อยไปมาก และจากมากไปน้อย ตามลำดับ ฟังก์ชั่นทั้งสองจะกำหนดคีย์ใหม่ เป็นค่าจำนวนเต็ม ตั้งแต่ 0 ให้กับอาร์เรย์ โดยไม่สนใจคีย์เดิม หมายเหตุ ฟังก์ชั่นต่างๆเกี่ยวกับการเรียงลำดับอาร์เรย์ จะรับอาร์เรย์เข้ามาเป็นอาร์กิวเมนต์แล้วจัดเรียงข้อมูลในอาร์เรย์นั้นโดยตรง เนื่องจากอาร์เรย์ถูกส่งผ่านโดยการอ้างอิง (pass-by-reference) ส่วนค่าที่ฟังก์ชั่นส่งคืนออกไปจะบอกให้รู้ว่าการทำงานของมันสำเร็จหรือล้มเหลว (คืนค่า TRUE ถ้าสำเร็จ และคืนค่า FALSE ถ้าล้มเหลว)
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ <? $fruits=array('app'=>'แอปเปิ้ล ', 3=>'ส้ม' , 12=>'สับปะรด' ,'mgo'=>'มะม่วง'); sort($fruits);//เรียงลำดับข้อมูลในอาร์เรย์ $fruits echo "<pre>"; print_r($fruits);//แสดงคีย์และข้อมูลในอาร์เรย์ $fruits ออกมา echo "</pre>"; ?>
ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ฟังก์ชั่นที่ใช้ทำงานกับอาร์เรย์ • ฟังก์ชั่น asortและ arsort ใช้เรียงลำดับข้อมูลในอาร์เรย์จากน้อยไปมาก และจากมากไปน้อย ตามลำดับ โดยรักษาคีย์เดิมของข้อมูลไว้ • ฟังก์ชั่น ksortkrsort ใช้เรียงลำดับข้อมูลในอาร์เรย์ตามค่าของคีย์จากน้อยไปมาก และจากมากไปน้อย ตามลำดับ
สรุป • อาร์เรย์ (Array) คือกลุ่มของค่าหรือข้อมูลที่เกี่ยวข้องกันซึ่งถูกจัดเก็บไว้ภายใต้ชื่อตัวแปรหนึ่งๆ ดังนั้นตัวแปรอาร์เรย์จึงเป็นตัวแปรที่สามารถเก็บค่าไว้ได้มากกว่า 1 ค่า พร้อมกัน • อาร์เรย์ในภาษา PHP แบ่งออกเป็น 2 รูปแบบ คือ Numerically Indexed Array (หรือเรียกง่ายๆว่า Numeric Array) กับ Associative Array โดย Numeric Array หมายถึง อาร์เรย์ที่มีคีย์เป็นค่าจำนวนเต็ม ซึ่ง PHP จะกำหนดคีย์ให้กับแต่ละสมาชิกโดยอัตโนมัติเริ่มจากศูนย์ ส่วน Associative Array หมายถึงอาร์เรย์ที่มีคีย์เป็นค่าชนิดใดก็ได้ (มักเป็นค่าสตริง) โดยที่กำหนดความสัมพันธ์ระหว่างคีย์กับข้อมูลเอง • การสร้างอาร์เรย์ทำได้ 2 วิธี คือ การใช้คำสั่ง array และการทยอยกำหนดค่าให้แก่ตัวแปรอาร์เรย์ในช่วงเขียนโปรแกรม • คำสั่ง foreachช่วยให้การเข้าถึงสมาชิกทั้งหมดของอาร์เรย์มีความสะดวกมากขึ้น โดยแต่ละรอบที่วนลูปจะเป็นการเข้าถึงสมาชิกหนึ่งๆ ของอาร์เรย์ • อาร์เรย์หลายมิติ (Multi-Dimensional Array) คือ อาร์เรย์ที่มีสมาชิกเป็นอาร์เรย์