陣列排序,共13個
- 函式中有
u
的,能自定義比較函式;有k
的,按照鍵來排序;有r
(reverse)的,倒序;有a(association)
的,一定是鍵值關聯,除了rsort()
usort()
sort()
shuffle()
,其他沒有a
的都是鍵值關聯,array_multisort()
鍵值關聯的保持,數字型別的不保持。 - 下列的所有排序函式都是直接作用於陣列本身, 而不是返回一個新的有序的陣列。
- 以下函式對於陣列中相等的元素,它們在排序後的順序是未定義的。 (也即相等元素之間的順序是不穩定的,即具有相同值的元素每次排序的結果都是不確定(關聯陣列))。php7
asort
arsort
uasort
已實現穩定排序,php5穩定排序:http://php.net/manual/zh/func… - 在對含有混合型別值的陣列排序時要小心,因為 sort() 可能會產生不可預知的結果。
1.array_multisort
- 可以用來一次對多個陣列進行排序,或者根據某一維或多維對多維陣列進行排序。
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
排序型別標誌:
- SORT_REGULAR (預設)- 將專案按照通常方法比較(不修改型別,區分大小寫,大寫字母會排在小寫字母之前)
- SORT_NUMERIC – 按照數字大小比較
- SORT_STRING – 按照字串比較(區分大小寫)
- SORT_LOCALE_STRING – 根據當前的本地化設定,按照字串比較。 它會使用 locale 資訊,可以通過 setlocale() 修改此資訊。
- SORT_NATURAL – 以字串的”自然排序”,類似 natsort()
- SORT_FLAG_CASE – 可以組合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小寫不敏感的方式排序字串。
- 1.1 如果有多個陣列引數時,
$array2
會根據$array1
的結果排序,像MySQL的group by
- 1.2 不區分大小寫的排序:
$array = array(`Alpha`, `atomic`, `Beta`, `bank`);
$array_lowercase = array_map(`strtolower`, $array); // 先複製一個轉為小寫陣列
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array); // 先對小寫陣列排序,再排序原陣列
print_r($array);
- 1.3 對資料庫結果進行排序
function array_orderby()
{
$args = func_get_args();
$data = array_shift($args);
foreach ($args as $n => $field) {
if (is_string($field)) {
$tmp = array();
foreach ($data as $key => $row)
$tmp[$key] = $row[$field];
$args[$n] = $tmp;
}
}
$args[] = &$data;
call_user_func_array(`array_multisort`, $args);
return array_pop($args);
}
2.sort
- 刪除原有的鍵名對陣列排序(順序)
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
-
sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);
排序結果和natcasesort()
一樣。
3.rsort
- 對陣列逆向排序
bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
4.asort
- 保持鍵值關聯(association)。主要用於對那些單元順序很重要的結合陣列進行排序。
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
5.arsort
- 倒序並保持索引關係(association,reverse)
bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
6.ksort
- 按
鍵名
排序
bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
7.krsort
- 按
鍵名
倒序
bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
8.usort
- 使用使用者自定義的比較函式對陣列中的
值
進行排序,要排序的陣列需要用一種不尋常的標準進行排序,那麼應該使用此函式。
bool usort ( array &$array , callable $value_compare_func )
-
$value_compare_func( mixed $a, mixed $b )
在$a
小於,等於或大於$b
時,該比較函式必須相應地返回一個小於,等於或大於 0 的整數。 -
usort($a, array("TestObj", "cmp_obj"))
物件屬性排序 - 在類中呼叫:
uasort($array, array($this,"value_compare_func"))
9.uasort
- 使用使用者自定義的比較函式對陣列中的值進行排序並保持索引關聯
bool uasort ( array &$array , callable $value_compare_func )
10.uksort
- 使用使用者自定義的比較函式對陣列中的
鍵名
進行排序
bool uksort ( array &$array , callable $key_compare_func )
11.natcasesort
- 不區分大小寫字母的自然排序(排完字母再排數字),保持鍵值關聯
bool natcasesort ( array &$array )
12.natsort
- 用“自然排序”演算法對陣列排序,保持鍵值關聯
bool natsort ( array &$array )
13.shuffle
- 本函式打亂(隨機排列單元的順序)一個陣列。鍵值不關聯
bool shuffle ( array &$array )