PHP usort 使用用戶自定義的比較函數對數組中的值進行排序


From: http://www.php100.com/cover/php/2395.html

usort

(PHP 4, PHP 5)

usort — 使用用戶自定義的比較函數對數組中的值進行排序

說明

bool usort ( array &$array , callback $cmp_function )

本函數將用用戶自定義的比較函數對一個數組中的值進行排序。如果要排序的數組需要用一種不尋常的標准進行排序,那么應該使用此函數。

比較函數必須在第一個參數被認為小於,等於或大於第二個參數時分別返回一個小於,等於或大於零的整數。

 

Note:

如果兩個成員比較結果相同,則它們在排序后的數組中的順序未經定義。到 PHP 4.0.6 之前,用戶自定義函數將保留這些單元的原有順序。但是由於在 4.1.0 中引進了新的排序算法,結果將不是這樣了,因為對此沒有一個有效的解決方案。

 

 

Note此函數為 array 中的元素賦與新的鍵名。這將刪除原有的鍵名,而不是僅僅將鍵名重新排序。

成功時返回 TRUE, 或者在失敗時返回 FALSE.

 

Example #1 usort() 例子

<?php
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {
    echo "$key: $value ";
}
?>

以上例程會輸出:

0: 1
1: 2
2: 3
3: 5
4: 6

 

Note:

很明顯在這個小例子中用 sort() 函數更合適。

 

 

Example #2 使用多維數組的 usort() 例子

<?php
function cmp($a, $b)
{
    return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
    echo "$fruits[$key]: " . $value["fruit"] . " ";
}
?>

當排序多維數組時,$a 和 $b 包含到數組第一個索引的引用。

以上例程會輸出:

$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons

 

 

Example #3 使用對象的成員函數的 usort() 例子

<?php
class TestObj {
    var $name;

    function TestObj($name)
    {
        $this->name = $name;
    }

    /* This is the static comparing function: */
    function cmp_obj($a, $b)
    {
        $al = strtolower($a->name);
        $bl = strtolower($b->name);
        if ($al == $bl) {
            return 0;
        }
        return ($al > $bl) ? +1 : -1;
    }
}

$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");

usort($a, array("TestObj", "cmp_obj"));

foreach ($a as $item) {
    echo $item->name . " ";
}
?>

以上例程會輸出:

b
c
d

 

參見 uasort()uksort()sort()asort()arsort()ksort()natsort() 和 rsort()

 ------------------------------------------

如果將類的靜態函數作為自定義排序函數,則寫法為:usort($arr, array('self', 'staticFunction'));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM