數組排序最常用的函數就是 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自訂數組排序
例子如下:
| 代碼如下 |
複製代碼 |
<?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); // 排序完輸出 /** * 自訂排序條件 * @param array $a * @param array $b * @return bool */ 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) } } |