程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 數組排序各種方法總結

php 數組排序各種方法總結

編輯:關於PHP編程

在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自定義數組排序


例子如下:

 代碼如下 復制代碼
 
<?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) } }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved