如果您想在類別或物件中使用 uasort,以下語法快速提醒
<?php
// 程序式:
uasort($collection, 'my_sort_function');
// 物件導向
uasort($collection, array($this, 'mySortMethod'));
// 具有靜態方法的物件導向
uasort($collection, array('self', 'myStaticSortMethod'));
?>
(PHP 4, PHP 5, PHP 7, PHP 8)
uasort — 使用使用者自訂的比較函式排序陣列並保持索引關聯
使用使用者定義的比較函式排序 array
,使其鍵保持與其關聯值的相關性。
這主要用於排序關聯式陣列,其中實際元素順序很重要。
注意:
如果兩個成員比較相等,它們會保留其原始順序。在 PHP 8.0.0 之前,它們在已排序陣列中的相對順序未定義。
注意:
將陣列的內部指標重置為第一個元素。
array
輸入的陣列。
callback
比較函式必須回傳一個整數。若第一個參數小於、等於或大於第二個參數,則分別回傳小於零、等於零或大於零的整數。
總是回傳 true
。
範例 #1 基本的 uasort() 範例
<?php
// 比較函式
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
// 要排序的陣列
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);
// 排序並印出結果陣列
uasort($array, 'cmp');
print_r($array);
?>
以上範例將輸出:
Array ( [a] => 4 [b] => 8 [c] => -1 [d] => -9 [e] => 2 [f] => 5 [g] => 3 [h] => -4 ) Array ( [d] => -9 [h] => -4 [c] => -1 [e] => 2 [g] => 3 [a] => 4 [f] => 5 [b] => 8 )
如果您想在類別或物件中使用 uasort,以下語法快速提醒
<?php
// 程序式:
uasort($collection, 'my_sort_function');
// 物件導向
uasort($collection, array($this, 'mySortMethod'));
// 具有靜態方法的物件導向
uasort($collection, array('self', 'myStaticSortMethod'));
?>
使用匿名函式的範例。
匿名函式有時會讓程式碼更容易理解。
<?php
$fruits = array('Orange9','Orange11','Orange10','Orange6','Orange15');
uasort ( $fruits , function ($a, $b) {
return strnatcmp($a,$b); // 或其他函式/程式碼
}
);
print_r($fruits);
?>
回傳
陣列
(
[3] => Orange6
[0] => Orange9
[2] => Orange10
[1] => Orange11
[4] => Orange15
)
只有我覺得嗎?還是下面的範例具有誤導性,實際上示範了更適合 usort() 的情況?
在試圖理解 uasort() 的描述後,聽起來它更像是用於排序像這樣的 1D 陣列
"john" => "$23.12"
"tim" => "$6.50"
"bob" => "$18.54"
並取回
"tim" => "$6.50"
"bob" => "$18.54"
"john" => $23.12"
(當然,假設您的排序函式會去除 $ 並作為數字進行評估——這會使 asort() 的使用變得複雜;)