一、什麼是usort?
在PHP中,usort()是用於對數組進行排序的函數,其整體語法如下:
bool usort ( array &$array , callable $callback )
其中,$array參數是被排序的數組,$callback參數是回調函數,用於比較兩個元素的大小。
該函數採用快速排序演算法對數組進行排序。與sort()函數不同的是,usort()允許使用自定義的比較函數。
二、如何使用usort?
使用usort進行數組排序的一般步驟如下:
- 定義一個回調函數,用於比較兩個數組元素的大小。
- 調用usort函數,傳入被排序的數組和回調函數。
其中,回調函數的代碼可以自定義,但需要返回三種不同情況中的一種:
- 返回值小於0,表示$a小於$b,即$a排在$b的前面。
- 返回值等於0,表示$a等於$b,即$a和$b的順序不變。
- 返回值大於0,表示$a大於$b,即$a排在$b的後面。
下面是一個示例回調函數的代碼:
function cmp($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; }
該函數使用了三目運算符,判斷$a是否小於$b,若是,返回-1,否則返回1。
接下來,我們可以調用usort()函數,將上述回調函數作為參數傳入,實現對數組的排序:
$array = array(3, 1, 6, 2, 8, 5); usort($array, "cmp"); print_r($array);
輸出結果為:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 6 [5] => 8 )
可以看出,該數組已經按照從小到大的順序排列了。
三、如何自定義回調函數?
在上一個示例中,我們定義了一個簡單的回調函數,但實際應用中,我們可能需要使用更為複雜的比較方式。
例如,對於一個關聯數組,我們可能需要按照其中某個鍵值進行排序。這時,我們可以使用匿名函數的方式自定義回調函數:
$array = array( array("id" => 1, "name" => "Tom", "age" => 20), array("id" => 2, "name" => "Jerry", "age" => 18), array("id" => 3, "name" => "Lucy", "age" => 22) ); usort($array, function($a, $b) { return $a['age'] - $b['age']; }); print_r($array);
輸出結果為:
Array ( [0] => Array ( [id] => 2 [name] => Jerry [age] => 18 ) [1] => Array ( [id] => 1 [name] => Tom [age] => 20 ) [2] => Array ( [id] => 3 [name] => Lucy [age] => 22 ) )
可以看出,該數組已經按照年齡的從小到大的順序排列了。
四、注意事項
在使用usort()函數時,需要注意以下事項:
- 回調函數中必須使用引用傳參。
- 回調函數中不能使用箭頭函數,因為箭頭函數無法訪問$this。
- 回調函數中不能使用eval()函數或者變數函數來調用。
五、總結
使用usort函數可以靈活地對數組進行排序,而且不受原數組元素類型的限制,可以自定義各種排序規則。但在使用過程中需要注意回調函數的編寫和注意事項。
原創文章,作者:TTPWU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329991.html