PHP 數組排序相關函數總結

來源:互聯網
上載者:User

標籤:lag   ini   演算法   blank   區分大小寫   frog   位元運算   而不是   字母   

數組排序函數包括:

sort()、rsort()、asort()、arsort()、ksort()、krsort()、natsort()、natcasesort()、shuffle()、array_multisort()、usort()、uasort()、uksort()

在區分這些數組排序函數之前,要明確一下幾個排序相關的知識點:

  1. 有些函數基於 array 的鍵來排序, 而其他的基於值來排序的:$array[‘key‘] = ‘value‘;
  2. 數組經過上述函數進行排序,數組在排序前鍵與值得關聯關係在一些排序函數處理後依然能夠保持,而在另一些函數處理後不能保持。
  3. 可供選擇的定序有:
    1. SORT_REGULAR - 正常比較單元(不改變類型)       即字串按照字串規則排序,數字按照數字排序,然後再將兩個類型拼接在一起(字串在前,數字在後)
    2. SORT_NUMERIC - 單元被作為數字來比較
    3. SORT_STRING - 單元被作為字串來比較
    4. SORT_LOCALE_STRING - 根據當前的地區(locale)設定來把單元當作字串比較,可以用 setlocale() 來改變。
    5. SORT_NATURAL - 和 natsort() 類似對每個單元以“自然的順序”對字串進行排序。 PHP 5.4.0 中新增的。       自然排序:(實現了一個和人們通常對字母數字字串進行排序的方法一樣的排序演算法並保持原有鍵/值的關聯,這被稱為“自然排序”),具體的實現規則可以參考:natsort
    6. SORT_FLAG_CASE - 能夠與 SORT_STRINGSORT_NATURAL 合并(OR 位元運算),不區分大小寫排序字串。
  4. 所有排序函數都是直接作用於數組本身, 而不是返回一個新的有序的數組
  5. 所有排序函數底層採用的演算法為快速排序,因此是不穩定排序。
函數申明 排序依據 數組索引鍵保持 排序的順序
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由低到高
bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由高到低
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由低到高
bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) value 由高到低
bool natsort ( array &$array ) value 自然排序,大小寫敏感
bool natcasesort ( array &$array ) value 自然排序,大小寫不敏感
bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) key key由低到高
bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) key key由高到低
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) value 關聯(string)鍵名保持不變,但數字鍵名會被重新索引 由參數決定
bool shuffle ( array &$array ) value 打亂數組
bool usort ( array &$array , callable $value_compare_func ) value 使用者定義
bool uasort ( array &$array , callable $value_compare_func ) value 使用者定義
bool uksort ( array &$array , callable $key_compare_func ) key 使用者定義

需要補充的重點:

  1. sort()、rsort()、shuffle()、usort()會打破排序前key與value之間的關聯
  2. array_multisort(), 除了可以對多個數組進行關聯排序,或者對多維陣列進行排序。因此要求參與排序的數組size保持一致,或者多維陣列每一維元素個數相等。
 1 <?php 2 $ar1 = array(10, 100, 100, 0); 3 $ar2 = array(1, 3, 2, 4); 4 array_multisort($ar1, $ar2); 5 var_dump($ar1); 6 var_dump($ar2); 7 /*********** 8 關聯排序,以$ar1 regular 升序排序,$ar2 在與$ar1關聯的基礎上,對相同$ar1值,不同$ar2值進行排序 9 array(4) {10   [0]=> int(0)11   [1]=> int(10)12   [2]=> int(100)13   [3]=> int(100)14 }15 array(4) {16   [0]=> int(4)17   [1]=> int(1)18   [2]=> int(2)19   [3]=> int(3)20 }21 **********/22 23 $ar = array(24        array("10", 11, 100, 100, "a"),25        array(   1,  2, "2",   3,   1)26       );27 array_multisort($ar[0], SORT_ASC, SORT_STRING,28                 $ar[1], SORT_NUMERIC, SORT_DESC);29 var_dump($ar);30 /*********31 array(2) {32   [0]=> array(5) {33     [0]=> string(2) "10"34     [1]=> int(100)35     [2]=> int(100)36     [3]=> int(11)37     [4]=> string(1) "a"38   }39   [1]=> array(5) {40     [0]=> int(1)41     [1]=> int(3)42     [2]=> string(1) "2"43     [3]=> int(2)44     [4]=> int(1)45   }46 }47 *********/

 

PHP 數組排序相關函數總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.