วันพุธที่ 6 มีนาคม พ.ศ. 2556

PHP : Array การเรียงลำดับ อาเรย์ (sorting)

ย้ายมาครับ ต่อไปนี้จะใช้การติด tag แทนครับ
มาดูการเรียงลำดับของ 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 ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น