ตัวอย่างโค้ดในบทความนี้จะเป็นตัวอย่างในการหาลำดับรายการก่อนหน้า และลำดับรายการถัดไป
ในตัวแปร array เพื่อเป็นแนวทางนำไปประยุกต์เพิ่มเติม ลักษณะจะคล้ายกับบทความก่อนหน้า ที่เป็น
การดึงรายการจากฐานข้อมูล
แนวทางหาไอดีของรายการก่อนหน้า รายการถัดไป แบบวนลูป อย่างง่าย
https://www.ninenik.com/content.php?arti_id=760 via @ninenik
การใช้งานกับ array จะเหมาะสำหรับกรณีข้อมูลมีจำนวนไม่มากจนเกินไป หลักการคือเราต้อง
สร้างตัวแปร array จากการคิวรี่จากฐานข้อมูล หรือชุดข้อมูล array ที่มีอยู่แล้ว มาเข้าสู่ขั้นตอน
ของการค้นหาตำแหน่ง key ของ array ปัจจุบัน แล้วทำการหา key ของ array ก่อนหน้า และ
key ของ array ถัดไป จากนั้น คืนค่าของข้อมูลของ array ที่ได้มาใช้ในการสร้าง url ลิ้งค์
ของรายการ ดูตัวอย่างโค้ดด้านล่าง เราจะสมมติ ตัวแปร array จากการสร้าง range มีค่าตั้งแต่
100 ถึง 125
โค้ดไฟล์ demo_page_detail.php
<?php //require_once("dbconnect.php"); ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <br> <div style="margin:auto;width:1000px;"> <?php // สมมติสร้างตัวแปร array สำหรับทดสอบ จากการใช้คำส่ัง range() จะได้ตัวแปร array มี key เป็น 0 1 2 .... $arr_data = range(100,125); ?> <pre> <?php //print_r($arr_data); // ถ้ามีตัวแปร array if($arr_data) { foreach($arr_data as $k => $v) // วนลูป array สร้าง ลิ้งค์ ส่งค่า { echo '<a href="?ID='.$v.'" >'.$v.'</a><br>'; } } ?> <?php // ถ้าไม่มีการส่งค่า id ปัจจุบัน if(!isset($_GET['ID'])) { $cur_key = 0; $chk_value = $arr_data[$cur_key]; }else{ // ถ้ามีการส่งค่า $chk_value = trim($_GET['ID']); // ค่าที่ต้องการค้นหาใน array } // ถ้ามีค่าของข้อมูล ID ปัจจุบัน if($chk_value){ $index = array_search($chk_value, $arr_data); // ค้นหา key ของ array จากค่าที่ค้นหา if($index !== FALSE) // ถ้าพบ { if($index == 0){ // ถ้าเป็นค่า key แรก $prev_value = end($arr_data); // ให้ค่าก่อนหน้าเป้นตัวสุดท้ายของ array }else{ // ถ้าไม่ใช่ key ตัวแรก $prev_value = $arr_data[$index - 1]; // .ให้ค่าก่อนหน้าเป็น ค่าของ key ก่อนหน้า } if($arr_data[$index] == end($arr_data)){ // ถ้าตัวที่ค้นหาหรือส่งค่ามาเป็นตัวสุดท้าย $next_value = $arr_data[0]; // ให้ค่าตัวถัดไปเป็น ค่า array ของ key ตัวแรก }else{ $next_value = $arr_data[$index + 1]; // .ให้ค่าตัวถัดไปเป็น ค่า array ของ key ของตัวถัดไป } } } echo "<hr>"; if(isset($prev_value) && isset($next_value)){ // ทดสอบแสดงค่า ID ของข้อมูลก่อนหน้า และข้อมูลถัดไป echo "Prev Val:".$prev_value."<br>"; echo "Next Val:".$next_value."<br>"; ?> <hr> <!-- ทดสอบนำค่าไปใช้สำหรับสร้างลิ้งค์ รายการก่อนหน้า และ รายการถัดไป--> <a href="?ID=<?=$prev_value?>">Back</a> <a href="?ID=<?=$next_value?>">Next</a> <?php } ?> </pre> </div> </body> </html>
เราสามารถเปลี่ยนตรงเงื่อนไข จาก
if($index !== FALSE) // ถ้าพบ { if($index == 0){ // ถ้าเป็นค่า key แรก $prev_value = end($arr_data); // ให้ค่าก่อนหน้าเป้นตัวสุดท้ายของ array }else{ // ถ้าไม่ใช่ key ตัวแรก $prev_value = $arr_data[$index - 1]; // .ให้ค่าก่อนหน้าเป็น ค่าของ key ก่อนหน้า } if($arr_data[$index] == end($arr_data)){ // ถ้าตัวที่ค้นหาหรือส่งค่ามาเป็นตัวสุดท้าย $next_value = $arr_data[0]; // ให้ค่าตัวถัดไปเป็น ค่า array ของ key ตัวแรก }else{ $next_value = $arr_data[$index + 1]; // .ให้ค่าตัวถัดไปเป็น ค่า array ของ key ของตัวถัดไป } }
ให้สั้นลงได้ดังนี้
if($index !== FALSE) // ถ้าพบ { $prev_value = ($index == 0)?end($arr_data):$arr_data[$index - 1]; $next_value = ($arr_data[$index] == end($arr_data))?$arr_data[0]:$arr_data[$index + 1]; }
ตัวอย่างเพิ่ม กรณีเราต้องการจัดรูปแบบ url เพิ่มเติม โดยหลักการ
เราจะต้องส่งค่าที่เป็น primary key เข้าไปใน url ด้วย ตัวอย่างโค้ดที่ 2 มีการจัดรูปแบบ url
ไว้ในตัวแปร $arr_page_navi ในตัวอย่าง ทำการสร้างตัวแปร url ไว้ในลูปของ foreach
ถ้าต้องการนำไปใช้กับฐานข้อมูล สามารถในไปแทรกในส่วน while() ลูป ของ คิวรี่ในฐานข้อมูลได้
โค้ดไฟล์ demo_page_detail2.php
<?php //require_once("dbconnect.php"); ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <br> <div style="margin:auto;width:1000px;"> <?php // สมมติกรณี้ใช้ค่าจาก primary key ของข้อมูล สร้างเป็น url $arr_data = array(100,200,300,500); $arr_page_navi= array(); // ตัวแปรสำหรับเก็บ url ?> <pre> <?php //print_r($arr_data); // ถ้ามีตัวแปร array if($arr_data) { foreach($arr_data as $k => $v) // วนลูป array สร้าง ลิ้งค์ ส่งค่า { $arr_page_navi[] = "?category=1&item=".$v; // สร้างรูปแบบตัวแปร url echo '<a href="?category=1&item='.$v.'" >'.$v.'</a><br>'; } } ?> <?php // ตรวจสอบตัวแปรการส่งค่า เปลี่ยนชื่อตัวแปรไปตามค่า primary key ที่ส่งมาทดสอบ // ถ้าไม่มีการส่งค่า item ปัจจุบัน if(!isset($_GET['item'])) { $cur_key = 0; $chk_value = $arr_data[$cur_key]; }else{ // ถ้ามีการส่งค่า $chk_value = trim($_GET['item']); // ค่าที่ต้องการค้นหาใน array } // ถ้ามีค่าของข้อมูล ID ปัจจุบัน if($chk_value){ $index = array_search($chk_value, $arr_data); // ค้นหา key ของ array จากค่าที่ค้นหา if($index !== FALSE) // ถ้าพบ { if($index == 0){ // ถ้าเป็นค่า key แรก $prev_value = end($arr_page_navi); // ให้ค่าก่อนหน้าเป้นตัวสุดท้ายของ array }else{ // ถ้าไม่ใช่ key ตัวแรก $prev_value = $arr_page_navi[$index - 1]; // .ให้ค่าก่อนหน้าเป็น ค่าของ key ก่อนหน้า } if($arr_data[$index] == end($arr_data)){ // ถ้าตัวที่ค้นหาหรือส่งค่ามาเป็นตัวสุดท้าย $next_value = $arr_page_navi[0]; // ให้ค่าตัวถัดไปเป็น ค่า array ของ key ตัวแรก }else{ $next_value = $arr_page_navi[$index + 1]; // .ให้ค่าตัวถัดไปเป็น ค่า array ของ key ของตัวถัดไป } } } echo "<hr>"; if(isset($prev_value) && isset($next_value)){ // ทดสอบแสดงค่า item ของข้อมูลก่อนหน้า และข้อมูลถัดไป echo "Prev Val:".$prev_value."<br>"; echo "Next Val:".$next_value."<br>"; ?> <hr> <!-- ทดสอบนำค่าไปใช้สำหรับสร้างลิ้งค์ รายการก่อนหน้า และ รายการถัดไป--> <a href="<?=$prev_value?>">Back</a> <a href="<?=$next_value?>">Next</a> <?php } ?> </pre> </div> </body> </html>
ส่วนการประยุกต์เพิ่มเติม ให้ทำการศึกษาจากตัวอย่างเป็นแนวทาง แล้วประยุกต์ตามต้องการ