การใช้งานแอเรย์ (Array) ของ PHP (ตอนที่ 2)

ในตอนที่แล้วผมได้อธิบายเกี่ยวกับแอเรย์ในเบื้องต้นไปแล้ว ในตอนนี้ผมจะอธิบายเพิ่มเติมเกี่ยวกับการประยุกต์ใช้งานเพื่อลดความยุ่งยากในการเขียนโค้ดลง ซึ่ง แอเรย์สามารถทำให้แนวคิดที่อาจจะดูซับซ้อนนั้นง่ายขึ้นทันตาเห็นเชียวครับ

ลองดูตัวอย่างในโจทย์นี้

ห้อง 101 เข้าพักวันที่ 10
ห้อง 102 เข้าพักวันที่ 10
ห้อง 103 เข้าพักวันที่ 10
ห้อง 102 เข้าพักวันที่ 11
ห้อง 101 เข้าพักวันที่ 11
ห้อง 103 เข้าพักวันที่ 12
ห้อง 102 เข้าพักวันที่ 12

หากคุณต้องการสรุปข้อมูลนี้ โดยการแสดงรายงานว่า ภายในเดือนนี้ (วันที่ 10 - 12) มีการใช้งานห้องพักใดจำนวนกี่ครั้ง คุณจะทำอย่างไร.....

หลายๆคนคงคิดไปหลายๆวิธีครับ ตั้งแต่ หาวิธีการ query จาก database อาจด้วยการจัด query ให้ได้เพียงครั้งเดียว (ระดับเทพ) หรือแม้กระทั่งค่อยๆ query ออกมาทีละครั้ง ด้วยการวนลูป หรือแม้กระทั่งใช้วิธีการจัดการด้วยตัวแปรหลายตัว แต่ในเมื่อบทความนี้เขียนเกี่ยวกับแอเรย์ ผมจะนำเสนอแนวคิดเกี่ยวกับการใช้แอเรย์เพื่อลดความยุ่งยากในการจัดการ รวมถึงการ query ที่ซับซ้อน

ก่อนอื่น แนวคิดการใช้ แอเรย์ จะเป็นการ query ข้อมูลออกมาจาก database ก่อน โดยใช้การจัดการโครงสร้างข้อมูลในรูปแบบแอเรย์ให้เป็นในแบบที่เราเข้าใจ
<?php
   // สมมุติข้อมูลจาก database (ประมาณนี้)
   $result = array();
   $result[] = array('room' => 101, 'date' => 10);
   $result[] = array('room' => 102, 'date' => 10);
   $result[] = array('room' => 103, 'date' => 10);
   $result[] = array('room' => 102, 'date' => 11);
   $result[] = array('room' => 101, 'date' => 11);
   $result[] = array('room' => 103, 'date' => 12);
   $result[] = array('room' => 102, 'date' => 12);
   // ดูโครงสร้างของ แอเรย์
   print_r($result);
?>

ลองใช้ print_r() เพื่อดูโครงสร้างข้อมูลด้านบนดูครับ ในทางปฏิบัติเราสามารถ query ข้อมูลออกมาจากฐานข้อมูลให้อยู่ในรูปนี้ได้ง่ายๆอยู่แล้ว
<?php
    // MYSQL_ASSOC เพื่อบังคับให้ mysql คืนค่าตามชื่อฟิลด์
   while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
      $result[] = $row;
   }
   // ดูโครงสร้างของ แอเรย์
   print_r($result);
?>

ลองทำดูนะครับ ให้สังเกตุและเปรียบเทียบผลลัพท์ที่ได้ดู

ขั้นต่อไปคือลองมาสรุปข้อมูลกันดูนะครับด้วยแอเรย์ที่ได้จากด้านบน แนวคิดก็คือ การสรุปข้อมูลในลักษณะนี้เราจะใช้ค่าคีย์ของแอเรย์เป็นชื่อของห้องพัก (room) ตามที่โจทย์กำหนด
<?php
   // วนลูปเพื่อสรุปข้อมูลตามห้อง เพื่อหาว่าแต่ละห้องมีคนพักกี่วัน
   $datas = array();
   foreach ($result AS $items) {
     // ใช้ room เป็นค่าคีย์ และเพิ่มจำนวนนับของแอเรย์ตามค่าคีย์
     $datas[$items['room']]++;
   }
   // แสดงผลลัพท์
   foreach ($datas AS $room => $count) {
     echo "<p>ห้อง $room มีผู้เข้าพักในเดือนนี้ $count วัน</p>";
   }
?>

อธิบายโค้ดด้านบนดังนี้
  • foreach ใช้สำหรับวนลูปแอเรย์โดยที่ไม่สนใจลำดับข้อมูล (เรียงตามลำดับข้อมูลที่เพิ่ม ก่อน-หลัง ในแอเรย์)
  • $datas[$items['room']]++; $items['room'] คือชื่อห้อง(101,102,103) และเครื่องหมาย ++ ใช้เพื่อเพิ่มจำนวนนับทีละ 1

มี 4 ตอนนะครับ อ่านต่อตอนอืนๆที่ลิงค์ด้านล่าง
^