php 數(shù)組排序各種方法總結
來源:程序員人生 發(fā)布時間:2014-03-27 08:41:34 閱讀次數(shù):2416次
在php中數(shù)組排序函數(shù)有很多很多,下面我來給各位朋友總結我們常用到的一些數(shù)組排序函數(shù)與用戶自己寫的數(shù)組排序實例.
數(shù)組排序最常用的函數(shù)就是 sort($arr); 它的作用是按數(shù)組的鍵值升序排列,并且排序后的數(shù)組鍵名不再是原來的鍵名,是按新數(shù)組來重新設置的鍵名。
而有時我們要求更復雜的排序。如按鍵名排序,這里用到 ksort($arr); 函數(shù),它會根據(jù)數(shù)組的鍵名排序,并維持原有的鍵值關系。相對應的 asort($arr); 函數(shù),是按鍵值排序,且維持原有的鍵值關系。
同樣原理,rsort(); arsort(); krsort(); 函數(shù)除了排序是按降序排列外,其它與sort(); rsort(); ksort(); 相同。
數(shù)組操作是PHP很重要的基礎,希望能好好運用。
按鍵值排序,即按標識符ASCⅡ碼值的大小排列順序。
ksort(): 按照數(shù)組標識符順序排列
krsort(): 按照數(shù)組標識符逆序排
實例1,代碼如下:
- <?php
- $languages=array(
- 'c'=>'php',
- 'd'=>'asp',
- 'a'=>'jsp',
- 'b'=>'java'
- );
- krsort($languages);
- foreach($languages as $key=>$val){
- echo "$key = $val".'<br>';
- };
- ?>
按元素值排序
asort(): 按照由小到大的順序對數(shù)組排序;
rsort(): 按照由大到小的順序對數(shù)組逆序排序。
將實例1的8-11行代碼改為:
- asort($languages);
- print_r($languages);
- echo "<br>";
- rsort($languages);
- print_r($languages);
刪除原有鍵名排序
sort(): 按照由小到大的順序對數(shù)組排序;
rsort(): 按照由大到小的順序對數(shù)組逆序排序。
將實例2的8-11行代碼改為:
- sort($languages);
- foreach($languages as $key=>$val){
- echo "languages[$key] = $val".'<br>';
- };
array_multisort -- 對多個數(shù)組或多維數(shù)組進行排序
說明:bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )
例子1.對多個數(shù)組排序,代碼如下:
- <?php
- $ar1 = array("10", 100, 100, "a");
- $ar2 = array(1, 3, "2", 1);
- array_multisort($ar1, $ar2);
- var_dump($ar1);
- var_dump($ar2);
- ?>
本例中經過排序后,第一個數(shù)組將包含 "10","a",100,100。第二個數(shù)組將包含 1,1,"2",3。第二個數(shù)組中的項目順序完全和第一個數(shù)組中相應的項目(100 和 100)順序一致,代碼如下:
- array(4) {
- [0]=> string(2) "10"
- [1]=> string(1) "a"
- [2]=> int(100)
- [3]=> int(100)
- }
- array(4) {
- [0]=> int(1)
- [1]=> int(1)
- [2]=> string(1) "2"
- [3]=> int(3)
- }
例子2,對多維數(shù)組排序,代碼如下:
- <?php
- $ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
- array_multisort ($ar[0], SORT_ASC, SORT_STRING,
- $ar[1], SORT_NUMERIC, SORT_DESC);
- ?>
本例中經過排序后,第一個數(shù)組將包含 10,100,100,"a"(作為字符串上升排序),第二個數(shù)組將包含 1,3,"2",1(作為數(shù)值下降排序)
PHP數(shù)組排序函數(shù)很多,也很強大,如:arsort,asort,krsort,ksort,sort…,但有時候還是滿足不了我們的需求,假如有一個二維數(shù)組,我們要按二維數(shù)組中的一個值來排序,就需要用到了usort自定義數(shù)組排序,例子如下:
- <?php
-
- $aa = array (array ("score"=>60),
- array ("score"=>70),
- array ("score"=>80),
- array ("score"=>90),
- array ("score"=>20),
- array ("score"=>10),
- array ("score"=>50),
- array ("score"=>30));
-
- echo '------排序前輸出------<br />';
- var_dump($aa);
-
- usort($aa, "cmp");
-
- echo '<br />------排序后輸出------<br />';
- var_dump($aa);
-
-
-
-
-
-
-
- function cmp($a, $b) {
- if ($a["score"] == $b["score"]) {
- return 0;
- }
- return ($a["score"] < $b["score"]) ? 1 : -1;
- }
-
- ?>
輸出結果:
------排序前輸出------
array(8) { [0]=> array(1) { ["score"]=> int(60) }
[1]=> array(1) { ["score"]=> int(70) }
[2]=> array(1) { ["score"]=> int(80) }
[3]=> array(1) { ["score"]=> int(90) }
[4]=> array(1) { ["score"]=> int(20) }
[5]=> array(1) { ["score"]=> int(10) }
[6]=> array(1) { ["score"]=> int(50) }
[7]=> array(1) { ["score"]=> int(30) } }
------排序后輸出------
array(8) { [0]=> array(1) { ["score"]=> int(90) }
[1]=> array(1) { ["score"]=> int(80) }
[2]=> array(1) { ["score"]=> int(70) }
[3]=> array(1) { ["score"]=> int(60) }
[4]=> array(1) { ["score"]=> int(50) }
[5]=> array(1) { ["score"]=> int(30) }
[6]=> array(1) { ["score"]=> int(20) }
[7]=> array(1) { ["score"]=> int(10) } }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈