PHP 數組(array)自定義排序

php提供的數組自定義排序函數

uasort使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯
bool uasort(array &$array,callable $cmp_function)
uksort()使用用戶自定義的比較函數對數組中的鍵名進行排序
usort()使用用戶自定義的比較函數對數組中的值進行排序

相關例子:
對三維數組進行排序

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");
print_r($fruits);
//輸出結果:
Array(
    [0] => Array([fruit] => apples)
    [1] => Array([fruit] => grapes)
    [2] => Array([fruit] => lemons))

以對象作爲回調函數對數組進行排序

class Obj{
    var $letter;
    function Obj($letter){
        $this->letter = $letter;
    }
    //靜態的 比較函數
    static function cmp_obj($a,$b){
        $a = strtolower($a -> name);
        $b = strtolower($b -> name);
        if($a == $b){
            return 0;
        }
        return ($a > $b) ? 1: -1;
    }
}
$a[] = new TestObj("f");
$a[] = new TestObj("h");
$a[] = new TestObj("z");

usort($a, array("TestObj", "cmp_obj"));
var_dump($a);
//輸出結果
array(3) {
  [0]=> object(TestObj)#1 (1) {
    ["name"]=> string(1) "f"}
  [1]=> object(TestObj)#2 (1) {
    ["name"]=> string(1) "h" }
  [2]=> object(TestObj)#3 (1) {
    ["name"]=> string(1) "z" }
}

將數組以另一個數組的順序進行排序

$arrayList = array("拜年","過年好","happy new year","雞年","紅包","QQ",
"Logo","富貴雙全","健康快樂","開工利");
$newYear = array( "雞年","過年好","紅包","QQ","Logo","拜年","happy new year",
"開工利","富貴雙全","健康快樂");    
usort($newYear,function($a,$b) use($arrayList){
    $indexB = array_search($b,$arrayList);
    $indexA = array_search($a,$arrayList);
    if($indexA == $indexB){
        return 0;
    }
    return $indexA < $indexB ? -1 :1;
});
var_dump($newYear);
//輸出結果:
array(10) {
  [0]=>string(6) "拜年"
  [1]=>string(9) "過年好"
  [2]=>string(14) "happy new year"
  [3]=>string(6) "雞年"
  [4]=>string(6) "紅包"
  [5]=>string(2) "QQ"
  [6]=>string(4) "Logo"
  [7]=>string(12) "富貴雙全"
  [8]=>string(12) "健康快樂"
  [9]=>string(9) "開工利"
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章