การหาลำดับก่อนหน้า และลำดับถัดไปในตัวแปร array แบบวนลูปอย่างง่าย

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
รายการก่อนหน้า รายการถัดไป วนลูป array

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ รายการก่อนหน้า รายการถัดไป วนลูป array

ดูแล้ว 6,537 ครั้ง


ตัวอย่างโค้ดในบทความนี้จะเป็นตัวอย่างในการหาลำดับรายการก่อนหน้า และลำดับรายการถัดไป
ในตัวแปร array เพื่อเป็นแนวทางนำไปประยุกต์เพิ่มเติม ลักษณะจะคล้ายกับบทความก่อนหน้า ที่เป็น
การดึงรายการจากฐานข้อมูล
 
แนวทางหาไอดีของรายการก่อนหน้า รายการถัดไป แบบวนลูป อย่างง่าย 
 
การใช้งานกับ 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> &nbsp;&nbsp;&nbsp; <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> &nbsp;&nbsp;&nbsp; <a href="<?=$next_value?>">Next</a>    
    <?php
}
?>
</pre>
</div>
</body>
</html>
 
 
ส่วนการประยุกต์เพิ่มเติม ให้ทำการศึกษาจากตัวอย่างเป็นแนวทาง แล้วประยุกต์ตามต้องการ

 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ







เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ