ข้ามไปที่เนื้อหาหลัก

PHP array_chunk() เทคนิคการเขียนโปรแกรมแสดงผล แบบแบ่งหลายคอลัมน์



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



สำหรับเทคนิคการแสดงผลแบบแบ่งหลายคอลัมน์นั้น ยังนิยมอย่างมากในการทำแกลอรี่รูปภาพ ซึ่งตัวอย่างที่นำมาให้ดูนี้อาจจะคุ้นตามกันอยู่แล้ว เป็นบทความที่นำมาจากเว็บไซต์ ThaiCreate.Com

PHP MySQL Multiple Column

จากตัวอย่างกำหนดให้ $intRows นับจำนวนรายการที่ดึงออกมาจากฐานข้อมูล

 จะมีคำสั่งที่ใช้ตรวจสอบจำนวนคอลัมน์ว่าครบหรือยังเพื่อขึ้นบรรทัดใหม่โดยตรวจสอบ

24.
25.if(($intRows)%2==0)
26.{
27.echo"</tr><tr>";
28.}

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


ถ้ากรณีที่เรามีหน้าเว็บกว้าง มีพื้นที่เหลือด้านขวาอีกมาก จะเพิ่มเป็น 3 หรือ 4 คอลัมน์ล่ะ จะทำยังไงดี
แก้แค่ที่เดียวนี่แหละครับ เปลี่ยนจากเลข 2 เป็นเลข 3 หรือ 4 หรือจำนวนคอลัมน์ที่เราต้องการได้เลย



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

เช่น

<?php
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
?>

จะได้ผลลัพธ์เป็น

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )
    [1] => Array
        (
            [0] => c
            [1] => d
        )
    [2] => Array
        (
            [0] => e
        )
)

อ่านรายละเอียดเพิ่มเติมได้จากคู่มือ www.php.net

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

<?php
$dbHost = "localhost";
$dbUser = "sunzandesign";
$dbPass = "13579";
$objConnect = mysql_connect($dbHost,$dbUser,$dbPass) or die(mysql_error());
$objDB = mysql_select_db("test");
mysql_query('SET NAMES UTF8');

$intRows = 0;
$data = array();
$strSQL = "SELECT * FROM gallery";
$objQuery = mysql_query($strSQL);
while($objResult = mysql_fetch_assoc($objQuery))
{
 $intRows++;
 $data[$intRows] = $objResult;
}

if($intRows > 0){//ถ้ามีข้อมูล ถึงจะทำงาน
 $columns = 4;
 $rows = array_chunk($data, 4);

 echo "<table border='1'>\n";
 foreach ($rows as $rowObject) {
  echo "<tr>";
  foreach ($rowObject as $objResult) {
   echo "<td>
    <center>
    <img width='150' height='170' src='". $objResult["Picture"] ."'><br />".$objResult["GalleryName"]."<br>
    </center>
    </td>";
  }
  if($cnum = count($rowObject)){//ถ้าสร้างตารางยังไม่ครบตามคอลัมน์ที่ต้องการ ให้สร้างเพิ่มจนครบ
   for($col=$cnum;$col<$columns;$col++){
    echo '<td> </td>';
   }
  }
  echo "</tr>\n";
 }
 echo "</table>\n";

}else{
    echo "ไม่พบข้อมูล.\n";
}
?>

ผลลัพธ์ที่ได้



จำนวนคอลัมน์ที่ได้นั้น ขึ้นอยู่กับตัวแปร $columns = 4; ซึ่งสามารถกำหนดได้ตามต้องการ

ถ้าเปรียนเทียบการเขียนโปรแกรมแสดงผลข้อมูลหลายคอลัมน์ แบบ ThaiCreate.Com และของผมที่ใช้ฟังก์ชั่น array_chunk() แยกอาร์เรย์ออกจากกันเป็นหลายๆ ชุด แล้ววนลูปอีกทีนั้น ดูแล้วแบบผมจะยุ่งยากกว่าใช่ไหมล่ะครับ แต่อย่าว่ากันเลยครับ ตัวอย่างก็คือตัวอย่าง แค่อยากให้มองเห็นภาพชัดเจนขึ้น


แต่สำหรับใครที่เขียนโปรแกรม PHP ด้วย CodeIgniter Framework คงพอจะมีประโยชน์อยู่บ้าง
เมื่อใช้งานร่วมกับฟังก์่ชั่น $query = $this->db->query("YOUR QUERY");


<?php
$query = $this->db->query("SELECT * FROM gallery");
$data = $query->result_array();
$rows = array_chunk($data, 4);
?>

และเริ่มวนลูปแสดงข้อมูลทั้งหมดใน $rows

จะเห็นว่าใน CodeIgniter นั้นจะมีฟังก์ชั่นที่ใ้ช้คิวรี่ข้อมูลมาเป็นอาร์เรย์ให้อยู่แล้ว หรือหลายๆ ท่านก็สร้างฟังก์ชั่นไว้ใ้ช้เองอยู่แล้ว ถ้านำวิธีการแยกข้อมูลอาร์เรย์ออกเป็นชุด เพื่อแสดงผลแบบหลายคอลัมน์ด้วย array_chunk() ก็น่าสนใจไม่น้อยทีเดียวใช่มั้ยล่ะครับ ^_^


SQL Code

--
-- Table structure for table `gallery`
--

CREATE TABLE IF NOT EXISTS `gallery` (
  `GalleryName` text NOT NULL,
  `Picture` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `gallery`
--

INSERT INTO `gallery` VALUES
('Into The New World', 'images/album_itnw.jpg'),
('The First Mini Album – Gee', 'images/album-gee.jpg'),
('Tell Me Your Wish (Genie)', 'images/album-genie.jpg'),
('The 1st Asia Tour : Into the New ', 'images/album_itnw_live.jpg'),
('Album – Girls’ Generation', 'images/album_gg.jpg'),
('The 3rd Album – The Boys', 'images/album_the_boys.jpg'),
('The 3rd Album – Mr.Taxi Ver', 'images/mrtaxi.jpg'),
('GIRL’S GENERATION ~The Boys~', 'images/theboys.jpg'),
('Baby Baby (Repackaged)', 'images/album-baby.jpg');




"PHP ไม่ได้สร้างสุดยอดโปรแกรม
แต่ PHP ช่วยให้งานคุณง่ายขึ้นต่างหาก"

PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 3,990 บาท



PHP CI MANIA PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้มเพียง 3,990 บาท 
http://www.phpcodemania.com

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

PHP กับการคิดส่วนลดเป็นเปอร์เซ็น 5%, 10%, 20% ตามช่วงราคาที่กำหนด

<?php     $total_price = 1000;     $discount = 0;         if($total_price >= 500 && $total_price < 1001){         $discount = 5;     }elseif($total_price >= 1001 && $total_price <= 5000){         $discount = 10;     }elseif($total_price >= 5001){         $discount = 20;     }         $discount_bath = ($total_price*$discount)/100; ?> <pre> ซื้อสินค้าครบ 0 ถึง 499 บาท ไม่ได้ส่วนลด ซื้อสินค้าครบ 500 ถึง 1000 บาท ได้ส่วนลด 5% ซื้อสินค้าครบ 1001 ถึง 5000บาท ได้ส่วนลด 10% ซื้อสินค้าครบ 5001 บาทขึ้นไป ได้ส่วนลด 20% </pre> <h3>รวมราคาสินค้า = <?php echo number_format($total_price,2);?></h3> <h5>ส่วนลด = <?php echo $discount;?>%  (<?php echo $discount_bath;?> บาท)</h5> <h2>ราคาหลังส่วนลด = <?php echo number_format($total_price - $discount_bath,2);?>บาท</h2> "PHP ไม่ได้สร้างสุดยอดโปรแกรม แต่ PHP ช่วยให้งานคุณง่ายขึ้นต