PHP 使用用戶自定義的比較函數對數組元素排序

usort()函數使用用戶自定義比較函數對數組中對元素進行排序,如果排序的數組需要使用不尋常的標準來進行排序,我們就使用該函數.


下面我直接貼出我的代碼,在代碼中我會有一個詳細的註釋.

1.對一維數組使用自定義函數進行排序.

//定義一個一維數組
$array = [5,6,9,3,10];

//自定義比較函數,比較函數有兩個參數,參數的意義是數組中的某個元素的鍵值.比
//較函數中數組的元素鍵值比較,必須返回一個大於,小於或者等於0的整數
function rank($a,$b){
    //如果$a元素小於$b元素
    //如果是按照升序的排列,應該返回一個負整數,代表將小的元素放在前面
    //如果是按照升序的降序,應該返回一個正整數,代表將大的元素放在前面
    if($a < $b){
        return -1;
    }elseif ($a > $b){
        //如果$a 大於 $b
        //如果按照升序排列,應該返回一個正整數.
        //如果按照降序排列,就返回一個負整數.
        return 1;
    }else{
        //如果$a = $b,返回0
        return 0;
    }
}

//我們使用usort函數調用自定義排序函數,對數組進行排序,usrot函數是對數組元素賦予了新的鍵名.舊的鍵名被刪除。
//第二個參數是回調函數,就是我們自定義的排序函數.
usort($array,'rank');
var_dump($array);

二.對二維數組進行排序,按照不尋常對數組進行排序.

<?php
//定義一個二維數組
$array = [['count'=>5],['count'=>3],['count'=>9],['count'=>6],['count'=>15]];
var_dump($array);
//自定義排序函數,我們按照索引數組鍵值中每個關聯數組中count索引名的鍵值進行排序。
//前面已經說過了,自定義排序函數的參數是數組的某個元素的鍵值.
function rank($a,$b){
    if($a['count'] < $b['count']){
        return -1;
    }elseif ($a['count'] > $b['count']){
        return 1;
    }else{
        return 0;
    }
}

//使用usort函數調用自定義的排序函數,進行排序
usort($array,'rank');
var_dump($array);

注意:使用自定義比較函數進行排序,兩個參數排序,必須返回一個正整數或者負整數,或者0,usort函數使用自定義函數進行排序,是將舊鍵名刪除,重新賦與鍵值新的鍵名,而不是將鍵名排序.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章