php 數組排序各種方法總結

來源:互聯網
上載者:User

數組排序最常用的函數就是 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) } }

聯繫我們

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