มาดูการเรียงลำดับของ array กันครับ
ซึ่งถ้าเป็นอาเรย์ 1 มิติ เรามี sort(), กับ ksort()
sort() ใช้เรียงจากน้อยไปมากครับ
<?php
$fruits = array("lemon", "orange", "banana", "apple");sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "\n";
}?>
fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange
จะเห็นว่าค่าจะเรียงจากน้อยไปมากครับ
ksort() ใช้เรียงจากน้อยไปมากโดยดูจาก key ครับ
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");ksort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}?>
a = orange b = banana c = apple d = lemonจาก ksort จะเรียง key จากน้อยไปมากก็ได้ตามตัวอย่างด้านบนครับ
---------------------------------------------------------------
เรามาต่อด้วย array 2 มิืติกันเลย
$a = array (
array (‘key1’ => 20, ‘key2’ => ‘twenty’),
array (‘key1’ => 40, ‘key2’ => ‘forty’),
array (‘key1’ => 10, ‘key2’ => ‘ten’)
);
ก็ได้เป็น
Array
(
[0] => Array
(
[key1] => 20
[key2] => twenty
)
[1] => Array
(
[key1] => 40
[key2] => forty
)
[2] => Array (
[key1] => 10
[key2] => ten
)
)
จะ สังเกตว่าเราจงใจให้มี 2 key ซึ่ง key1 เป็นตัวเลข และ key2 เป็นตัวอักษร เพราะเราจะมาดูวิธีการ sort โดยใช้ทั้งตัวเลขและตัวอักษรกันครับ
-------------------------------------------------------------------------------
ซึ่งฟังก์ชั่นที่เราสามารถใช้ได้ก็คือ usort(), uasort(), uksort()
ซึ่งการใช้งานเราจำเป็นต้องสร้าง function เพื่อให้ในการเรียงลำดับว่าจากน้อยไปมากหรือมากไปน้อยครับ
function mysort1 ($x, $y) {
return ($x[‘key1’] > $y[‘key1’]);
}
และเรียกใช้
usort ($a, ‘mysort1’);
จะเป็นการเรียงจากน้อยไปมากครับ
Array
(
[0] => Array
(
[key1] => 10
[key2] => ten
)
[1] => Array
(
[key1] => 20
[key2] => twenty
)
[2] => Array
(
[key1] => 40
[key2] => forty
)
)
usort ที่เราใช้ไปเป็นการเรียงลำดับโดยที่ไม่ได้คงค่า key ไว้ที่เดิมครับ หากอยากได้ key อยู่เป็นค่าเดิมต้องใช้ uasort ครับ ลองเล่นแล้วดูค่า key ได้ครับ ส่วนตัวสุดท้าย uksort คือการ sort ด้วย key ครับ
------------------------------------------------------------------------------------------
ไปแม่น้ำมาซักพัก มาเรียงด้วย key2 ซึ่งเป็น string กันเลยครับ
function mysort2 ($x, $y) {
return strcasecmp($x[‘key2’],$y[‘key2’]);
}
อันนี้เป็นการเรียงตามตัวอักษรโดยใช้ key2 ครับ
usort ($a, ‘mysort2’);
ซึ่ง strcasecmp คือการเปรียบเทียบโดยไม่สนใจว่าตัวพิมพ์เล็กหรือพิมพ์ใหญ่ ส่วนหากเปรียบเทียบปกติก็ใช้ strcmp ได้ครับ
ผล
Array
(
[0] => Array
(
[key1] => 40
[key2] => forty
)
[1] => Array
(
[key1] => 10
[key2] => ten
)
[2] => Array
(
[key1] => 20
[key2] => twenty
)
)
เห็นมั้ยครับ ง่ายๆ ใช้สะดวก เพียงติด key ไว้กับ array ของท่านก็สามารถจะเรียงได้อย่างง่ายดายครับ
---------------------------------------------------------------------------
แถมๆๆๆ uksort
<?phpfunction cmp($a, $b)
{
$a = preg_replace('@^(a|an|the) @', '', $a);
$b = preg_replace('@^(a|an|the) @', '', $b);
return strcasecmp($a, $b);
}$a = array("John" => 1, "the Earth" => 2, "an apple" => 3, "a banana" => 4);uksort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}?>
ได้เป็น
an apple: 3 a banana: 4 the Earth: 2 John: 1
ที่มาของความรู้ php manual และ PHP 5 Advanced ครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น