在php中數組排序函數有很多很多(rsort,sort,asort,rsort,krsort,ksort,array_multisort),下面我來給各位朋友總結我們常用到的一些數組排序函數與用戶自己寫的數組排序實例,有需要使用的朋友可參考。
數組排序最常用的函數就是 sort($arr); 它的作用是按數組的鍵值升序排列,並且排序後的數組鍵名不再是原來的鍵名,是按新數組來重新設置的鍵名。
而有時我們要求更復雜的排序。如按鍵名排序,這裡用到 ksort($arr); 函數,它會根據數組的鍵名排序,並維持原有的鍵值關系。相對應的 asort($arr); 函數,是按鍵值排序,且維持原有的鍵值關系。
同樣原理,rsort(); arsort(); krsort(); 函數除了排序是按降序排列外,其它與sort(); rsort(); ksort(); 相同。
數組操作是PHP很重要的基礎,希望能好好運用。
按鍵值排序
即按標識符ASCⅡ碼值的大小排列順序。
ksort(): 按照數組標識符順序排列
krsort(): 按照數組標識符逆序排
實例1:
<?php
$languages=array(
'c'=>'php',
'd'=>'asp',
'a'=>'jsp',
'b'=>'java'
);
krsort($languages);
foreach($languages as $key=>$val){
echo "$key = $val".'<br>';
};
?>
按元素值排序
asort(): 按照由小到大的順序對數組排序;
rsort(): 按照由大到小的順序對數組逆序排序。
將實例1的8-11行代碼改為:
asort($languages);
print_r($languages);
echo "<br>";
rsort($languages);
print_r($languages);
刪除原有鍵名排序
sort(): 按照由小到大的順序對數組排序;
rsort(): 按照由大到小的順序對數組逆序排序。
將實例2的8-11行代碼改為:
代碼如下 復制代碼sort($languages);
foreach($languages as $key=>$val){
echo "languages[$key] = $val".'<br>';
};
array_multisort -- 對多個數組或多維數組進行排序
說明
bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )
例子 1. 對多個數組排序
代碼如下 復制代碼<?php
$ar1 = array("10", 100, 100, "a");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>
本例中經過排序後,第一個數組將包含 "10","a",100,100。第二個數組將包含 1,1,"2",3。第二個數組中的項目順序完全和第一個數組中相應的項目(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. 對多維數組排序
代碼如下 復制代碼<?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);
?>
本例中經過排序後,第一個數組將包含 10,100,100,"a"(作為字符串上升排序),第二個數組將包含 1,3,"2",1(作為數值下降排序)。
PHP數組排序函數很多,也很強大
如:arsort,asort,krsort,ksort,sort…
但有時候還是滿足不了我們的需求
假如有一個二維數組,我們要按二維數組中的一個值來排序
就需要用到了usort自定義數組排序
例子如下:
輸出結果:
代碼如下 復制代碼------排序前輸出------
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) } }