ผลลัพธ์ที่ได้ |
ปกติแล้วเมื่อเราใช้ PHP วนลูปข้อมูลจากฐานข้อมูล MySQL ด้วย while() ข้อมูลจะถูกดึงออกมาเรียงกัน และเราสามารถแบ่งข้อมูลในแนวนอนด้วย array_chunk() หรืออาจจะใช้วิธีหารเอาเศษ เพื่อเทียบดูว่าเมื่อไหร่จะขึ้น </tr><tr> หรือปิดเปิดบรรทัดใหม่
แต่ในกรณีแนวตั้ง หลังจากที่เราใช้ while() ลูปดึงข้อมูลมาแล้วนั้น ผมจะใช้วิธีการนับจำนวนอาร์เรย์ทั้งหมด แล้วเอามาหารตามจำนวนแถวที่ต้องการ เพื่อสร้างอาร์เรย์ชุดใหม่ ที่ได้จำนวนคอลัมน์ และลำดับของข้อมูลตามการจัดเรียงตารางแนวตั้งที่ต้องการ
ซอร์สโค้ด PHP + PDO with MySQL
<?php
$user = 'tobedev';
$pass = 'dev.1234';
try {
$dbh = new PDO('mysql:host=localhost:33065;dbname=tobedev_example', $user, $pass);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$stm = $dbh->prepare("SELECT name, price FROM tb_product LIMIT 14");
$stm->execute();
$no = 1;
$data = array();
while($result = $stm->fetch(PDO::FETCH_ASSOC)){
$result['no'] = $no++;
$data[] = $result;
}
$stm = null;
//echo '<pre>',print_r($data,true), '</pre>';
$count = count($data); //หาจำนวนข้อมูลทั้งหมด
$row_num = 5; //กำหนดจำนวนแถวที่ต้องการ
$col_num = ceil($count/$row_num); //จำนวนคอลัมน์ที่จะแสดง
//สร้างอาร์เรย์ชุดใหม่
$new_data = array();
for($i=0;$i<$row_num;$i++) //วนลูปตามจำนวนแถวที่ต้องการ
{
$row = array();
$index = $i;
for($j=0;$j<$col_num;$j++) //วนลูปตามจำนวนคอลัมน์ที่คำนวณได้
{
$row[] = isset($data[$index]) ? $data[$index] : '';
$index += $row_num;//เลื่อนลำดับข้อมูลของคอลัมน์ต่อไป
}
$new_data[] = $row;
}
//echo '<pre>',print_r($new_data,true), '</pre>';
//สร้างตารางข้อมูล
echo '<table border=1 cellpadding=5 cellspaceing=1>';
echo '<tr>';
for($i=0;$i<$col_num;$i++) //วนลูปตามจำนวนคอลัมน์ที่คำนวณได้
{
echo "<th>No</th>
<th>Name</th>
<th>Price</th>";
}
echo '</tr>';
foreach ($new_data as $row) //วนลูปแสดงข้อมูลในอาร์เรย์ชุดใหม่ทีละแถว
{
echo "<tr>";
foreach ($row as $data) //แสดงอาร์เรย์แต่ละชุด
{
echo "<td style='background-color:#eeeeee'>$data[no]</td>
<td>$data[name]</td>
<td>$data[price]</td>";
}
echo "</tr>";
}
echo '</table>';
$dbh = null;
?>
โค้ด SQL สำหรับสร้างตารางข้อมูลเพื่อทดสอบ
--
-- Database: `tobedev_example`
--
-- --------------------------------------------------------
--
-- Table structure for table `tb_product`
--
CREATE TABLE IF NOT EXISTS `tb_product` (
`id` int(11) NOT NULL,
`name` varchar(30) NOT NULL,
`price` double(12,2) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
--
-- Dumping data for table `tb_product`
--
INSERT INTO `tb_product` (`id`, `name`, `price`) VALUES
(1, 'Product 1', 100.00),
(2, 'Product 2', 100.00),
(3, 'Product 3', 100.00),
(4, 'Product 4', 100.00),
(5, 'Product 5', 100.00),
(6, 'Product 6', 100.00),
(7, 'Product 7', 100.00),
(8, 'Product 8', 100.00),
(9, 'Product 9', 100.00),
(10, 'Product 10', 100.00),
(11, 'Product 11', 100.00),
(12, 'Product 12', 100.00),
(13, 'Product 13', 100.00),
(14, 'Product 14', 100.00),
(15, 'Product 15', 100.00);
--
-- Indexes for dumped tables
--
--
-- Indexes for table `tb_product`
--
ALTER TABLE `tb_product`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `tb_product`
--
ALTER TABLE `tb_product`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=16;
ความคิดเห็น
แสดงความคิดเห็น