PHP數組排序函數:sort、asort和ksort的不同

來源:互聯網
上載者:User

標籤:排序   style   padding   改變   col   cccccc   兩種   閱讀   class   

做PHP開發時經常需要對數組進行排序,一維數組的排序中往往會用到三個函數:sort、asort和ksort。

大家都知道的是:sort()和asort()都是對值進行排序的,區別在於sort()排序後會去掉鍵,而asort()會保留鍵。如:

$a=array(‘a‘=>‘c‘,‘b‘=>‘b‘,‘c‘=>‘d‘,‘d‘=>‘a‘);asort($a);var_dump($a);

輸出結果為:

array(4) { ["d"]=> string(1) "a" ["b"]=> string(1) "b" ["a"]=> string(1) "c" ["c"]=> string(1) "d" 
}

$a=array(‘a‘=>‘c‘,‘b‘=>‘b‘,‘c‘=>‘d‘,‘d‘=>‘a‘);sort($a);var_dump($a);

輸出結果為:

array(4) { 
[0]=> string(1) "a"
[1]=> string(1) "b"
[2]=> string(1) "c"
[3]=> string(1) "d"
}

而ksort()與上面的不同在於這個函數是用鍵來排序的。

$a=array(‘c‘=>‘a‘,‘b‘=>‘d‘,‘d‘=>‘c‘,‘a‘=>‘b‘);ksort($a);var_dump($a);

輸出結果為:

array(4) { 
["a"]=> string(1) "b"
["b"]=> string(1) "d"
["c"]=> string(1) "a"
["d"]=> string(1) "c" }

 

不過,ksort()和前兩種排序還有一個不同可能被人忽略:

當進行數字和字元混排的時候:

$a=array(‘1‘=>‘1‘,‘2‘=>‘2‘,‘d‘=>‘d‘,‘a‘=>‘a‘);ksort($a);var_dump($a);asort($a);var_dump($a);

輸出結果:

array(4) { ["a"]=> string(1) "a" ["d"]=> string(1) "d" [1]=> string(1) "1" [2]=> string(1) "2" } array(4) { [1]=> string(1) "1" [2]=> string(1) "2" ["a"]=> string(1) "a" ["d"]=> string(1) "d" }

排序結果不一樣了。似乎ksort認為字母應該排在數字前面,而asort認為字母應該排在數字後面。閱讀php文檔會發現,這三個函數都有第二個參數:sorttype

參數 描述
array 必需。輸入的數組。
sorttype

可選。規定如何排列數組的值。可能的值:

  • SORT_REGULAR - 預設。以它們原來的類型進行處理(不改變類型)。
  • SORT_NUMERIC - 把值作為數字來處理
  • SORT_STRING - 把值作為字串來處理
  • SORT_LOCALE_STRING - 把值作為字串來處理,基於本地設定*。

 

一般我們不會傳入第二個參數的,但是這種數字和字母混排的情況就有必要考慮了。對於asort,我們是按值排序的,例子中四個元素都是string類型的,於是SORT_REGULAR - 預設會按SORT_STRING - 把值作為字串來處理。而對於ksort,雖然我們的鍵都是字串,但php會自動把字串型的數字鍵轉換為int型,因此排序的時候SORT_REGULAR - 預設會按SORT_NUMERIC - 把值作為數字來處理。排序方式不一樣當然結果不一樣了。我們可以驗證一下:

$a=array(‘a‘=>‘a‘,‘b‘=>‘b‘,‘1‘=>1,‘2‘=>2);ksort($a);var_dump($a);asort($a);var_dump($a);

輸出結果:

array(4) { 
["a"]=> string(1) "a"
["b"]=> string(1) "b"
[1]=> int(1)
[2]=> int(2)
}
array(4) {
["a"]=> string(1) "a"
["b"]=> string(1) "b"
[1]=> int(1)
[2]=> int(2)
}

這樣世界就和平了~

在使用這幾個函數時,必要的時候還是要傳入第二個參數的呀。不過還是希望以後不會再遇到需要將字母和數字一起排序這樣的反人類的情況——沒人知道到底哪個該放在前面~

PHP數組排序函數:sort、asort和ksort的不同

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.