PHP เบื้องต้น > การทำงานกับ Array
ปฏิบัติการบน Array
ปฏิบัติการพื้นฐานบน array เช่น การเรียงลำดับ การรวม และการใช้ฟังก์ชันภายในของ PHP ได้รับการกล่าวถึงต่อไปนี้ ในการทำงานเหล่านี้มีการใช้ array เป็นพารามิเตอร์และปรับปรุงเนื้อหาภายใน array ฟังก์ชันภายในยกเว้นกฎข้อนี้ โดยการใช้ & operator เพื่อส่งผ่านพารามิเตอร์ด้วยการอ้างอิง
การเรียงลำดับ
เนื่องจาก PHP เก็บข้อมูลตามการเพิ่ม จึงมีโอกาสที่ต้องการเรียงลำดับใหม่ สำหรับงานนี้มีหลายฟังก์ชัน แต่ที่ตรงมากคือ ฟังก์ชัน sort ที่ปรับปรุง array ตามเนื้อหา
<?php
$getRandom = array(15, 12, 20, 14, 9, 3);
var_dump($getRandom);
echo "<br/>\n";
sort($getRandom);
var_dump($getRandom);
?>
สคริปต์ข้างบนให้ผลลัพธ์ดังนี้
array(6) { [0]=> int(15) [1]=> int(12) [2]=> int(20) [3]=> int(14) [4]=> int(9) [5]=> int(3) }
array(6) { [0]=> int(3) [1]=> int(9) [2]=> int(12) [3]=> int(14) [4]=> int(15) [5]=> int(20) }
จากผลลัพธ์นี้พบว่า ค่าได้รับการเรียงลำดับ ส่วนคีย์เดิมของค่าหายไปและมีการกำหนดให้ใหม่ อนุพันธ์ของฟังก์ชัน sort คือ asort ทำการเรียงเฉพาะค่าและรักษาคีย์ไว้
การเรียงลำดับข้อความ
การเรียงลำดับข้อความทำได้ง่าย
<?php
$softdrinks = array("Coke", "Pepsi", "Fanta", "Sprite", " Green Spot", "Seven Up");
print_r($softdrinks);
sort($softdrinks);
echo "<br/>\n";
print_r($softdrinks);
?>
ผลลัพธ์คือ
Array ( [0] => Coke [1] => Pepsi [2] => Fanta [3] => Sprite [4] => Green Spot [5] => Seven Up )
Array ( [0] => Coke [1] => Fanta [2] => Green Spot [3] => Pepsi [4] => Seven Up [5] => Sprite )
การเรียงลำดับของฟังก์ชัน sort เป็นตามรหัส ASCII 8 บิต จึงทำให้ตัวอักษร "Z" มาก่อน "a" (ในรหัส ASCII อักษร "Z" น้อยกว่า "a") และไม่สามารถควบคุมตัวอักษรที่ไม่ใช่ภาษาอังกฤษ
การเรียงลำดับ " ตามธรรมชาติ " ของตัวเลขที่พบในข้อความสามารถใช้ฟังก์ชัน natsort หรือ natcasesort ฟังก์ชันหลังไม่สนใจตัวพิมพ์เมื่อเรียงลำดับค่า
ถ้ามีไฟล์
"report1.pdf", "report10.pdf", "report20.pdf", "report6.pdf"
ผลลัพธ์น่าพอใจกว่าเป็น
"report1.pdf", "report6.pdf", "report10.pdf", "report20.pdf"
ฟังก์ชันการเรียงลำดับแบบเจาะจง
เมื่อต้องการควบคุมการเรียงลำดับของตัวเอง สามารถใช้ฟังก์ชัน usort (และ uasort) นี่เป็นการให้การเจาะจงการเรียงลำดับเองและทำการเปรียบเทียบค่าใน array ตัวอย่าง array ของรถยนต์ เมื่อต้องการเรียงลำดับตามราคา สามารถเขียนฟังก์ชันให้มองหาใน array ลูก และเปรียบเทียบราคา ฟังก์ชันผู้ใช้กำหนดเองนี้ส่งออก 1, 0 และ -1 ขึ้นกับค่าแรกมากกว่า เท่ากับ หรือน้อยกว่าค่าที่ 2
<?php
function compare_stock($var_stock 1 , $var_stock 2)
{
if ($var_stock 1[" stock"] > $var_stock 2[" stock"])
return 1 ;
else if ($var_stock 1[" stock"] == $var_stock 2[" stock"])
return 0 ;
else
return - 1 ;
}
$products = array();
$products["ShampooAloevera"] = array("desc" => "Shampoo Aloe vera",
" volumn_cc" => 200 , " price" => 50 , " stock" => 245) ;
$products["ShampooSoapnut"] = array("desc" => "Shampoo Soapnut",
" volumn_cc" => 200 , " price" => 50 , " stock" => 98) ;
$products["ShampooGinger"] = array("desc" => "Shampoo Ginger",
" volumn_cc" => 200 , " price" => 50 , " stock" => 127) ;
uasort($products, "compare_stock");
foreach ($products as $product)
{
echo "{$product['desc']} จำนวน {$product['stock']}<br/>\n";
}
?>
เมื่อเรียกใช้จะให้ผลลัพธ์ดังนี้
Shampoo Soapnut จำนวน 98
Shampoo Ginger จำนวน 127
Shampoo Aloe vera จำนวน 245
การเรียงลำดับย้อนกลับ
ถ้าต้องการเรียงลำดับย้อนกลับสามารถใช้ฟังก์ชัน rsort ( มาจาก sort) และ arsort (มาจาก asort) แต่ไม่มี ursort เนื่องจากการย้อนกลับค่าสามารถเขียนฟังก์ชันเจาะจงการเรียงลำดับได้
การเรียงลำดับด้วยคีย์
ฟังก์ชันสำหรับการเรียงลำดับคีย์แทนการเรียงลำดับค่า คือ ksort, krsort และ uksort เนื่องการเรียงลำดับโดยคีย์ต้องรักษาชื่อคีย์หรือดัชนี จึงไม่มี kasort ฟังก์ชันเหล่านี้รับรู้ array ตามเรียงลำดับคีย์และรักษาค่าที่สัมพันธ์กับคีย์
|