เราได้รับอาร์เรย์มา ซึ่งประกอบด้วยวันที่ หลายๆวันที่ ในรูปแบบ
(Y-m-d) และเราต้องเขียนโปรแกรมใน PHP
เพื่อเรียงลำดับวันที่ทั้งหมดที่อยู่ในอาร์เรย์จากมากไปน้อย
ตัวอย่าง input และ output
ฟังก์ชั่น Inbuilt ที่ใช้:
ตัวอย่างโค้ดดังนี้
ตัวอย่าง input และ output
Input : array("2018-06-04", "2014-06-08", "2018-06-05")
Output : 2018-06-05 2018-06-04 2014-06-08
Input : array("2016-09-12", "2009-09-08", "2009-09-09")
Output : 2016-09-12 2009-09-09 2009-09-08
เพื่อแก้ปัญหานี้ในC / C++ / Java หรือภาษาโปรแกรมอื่น
ๆ
เราจะต้องเปรียบเทียบวันที่ตามปีเดือนและสุดท้ายตามวันโดยเก็บไว้ในโครงสร้างใด
ๆ หรือโครงสร้างข้อมูลที่ต้องการอื่น ๆ แต่ใน PHP ปัญหานี้ดูเหมือนจะง่ายมากถ้าเราใช้ฟังก์ชั่น strtotime () ฟังก์ชั่น strtotime() เป็นฟังก์ชั่น
PHP ที่ใช้เปลี่ยนวันที่ที่กำหนดในรูปแบบใด ๆ ที่เป็น timestamp
ซึ่งเป็นจำนวนเต็มขนาดใหญ่ integer
โดยปกติแล้วติแล้วในการเรียงลำดับอาร์เรย์เราสามารถใช้ ฟังก์ชั่น usort() โดยการกำหนดฟังก์ชั่นเปรียบเทียบ ฟังก์ชันตัวเปรียบเทียบจะยอมรับอาร์กิวเมนต์ของวันที่
สองค่าซึ่งจะถูกแปลงเป็นเวลาจำนวนเต็มโดยใช้ฟังก์ชั่น strtotime ()
จากนั้นเปรียบเทียบกับวันที่จัดเรียงตาม timestamp
พอจะเข้าใจหลักการแล้วใช่ไหมครับ เรามาดูกันฟังก์ชั่น Inbuilt ที่ใช้:
- strtotime(): ฟังก์ชันนี้เปลี่ยนสตริงวันที่ที่กำหนดเป็น timestamp (ค่า integer )
- usort(): ฟังก์ชั่นนี้จะเรียงลำดับอาร์เรย์ที่กำหนดตามฟังก์ชั่นการเปรียบเทียบที่กำหนด
ตัวอย่างโค้ดดังนี้
<?php
// PHP program to sort array of dates
// user-defined comparison function
// based on timestamp
function compareByTimeStamp($time1, $time2)
{
if (strtotime($time1) < strtotime($time2))
return 1;
else if (strtotime($time1) > strtotime($time2))
return -1;
else
return 0;
}
// Input Array
$arr = array("2016-09-12", "2009-09-06", "2009-09-09");
// sort array with given user-defined function
usort($arr, "compareByTimeStamp");
print_r($arr);
?>
ผลลัพธ์ที่ได้Array
(
[0] => 2016-09-12
[1] => 2009-09-09
[2] => 2009-09-06
)
ผลลัพธ์ที่ก็เป็น array ที่วันที่ถูกเรียงจากมากไปน้อย หรือ
ล่าสุดไปอดีตเรียบร้อย ซึ่งหลักๆเราใช้แค่สองฟังก์ชันนั้นคือ strtotime()
และ usort() หวังว่าผู้อ่านจะเข้าใจและสามารถนำไปต่อยอดได้น่ะครับ
0 ความคิดเห็น:
แสดงความคิดเห็น