php多維陣列排序可以用array_multisort() 函數來處理,array_multisort() 函數可以用來一次對多個數組進行排序,或者根據某一維或多維對多維陣列進行排序,關聯(string)鍵名保持不變,但數字鍵名會被重新索引
排序次序標誌:
SORT_ASC - 按照上升順序排序
SORT_DESC - 按照下降順序排序
排序類型標誌:
SORT_REGULAR - 將項目按照通常方法比較
SORT_NUMERIC - 將項目按照數值比較
SORT_STRING - 將項目按照字串比較
例子 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)順序一致。
但是這些都不可以指定由那個索引值進行排名了,下面我就整理了幾個函數演算法都不錯。
範例程式碼
代碼如下 |
|
/** * 對多位元組進行排序 * @param $multi_array 數組 * @param $sort_key需要傳入的鍵名 * @param $sort排序類型 */ function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) { if (is_array($multi_array)) { foreach ($multi_array as $row_array) { if (is_array($row_array)) { $key_array[] = $row_array[$sort_key]; } else { return FALSE; } } } else { return FALSE; } array_multisort($key_array, $sort, $multi_array); return $multi_array; } |
例子二
代碼如下 |
|
function array_sort($arr, $keys, $type = 'asc') { $keysvalue = $new_array = array(); foreach ($arr as $k => $v) { $keysvalue[$k] = $v[$keys]; } if ($type == 'asc') { asort($keysvalue); } else { arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k => $v) { $new_array[] = $arr[$k]; } return $new_array; } |
例子3
代碼如下 |
|
/* function:二維數組按指定的索引值排序 author:www.111cn.net */ function array_sort($array,$keys,$type='asc'){ if(!isset($array) || !is_array($array) || empty($array)){ return ''; } if(!isset($keys) || trim($keys)==''){ return ''; } if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){ return ''; } $keysvalue=array(); foreach($array as $key=>$val){ $val[$keys] = str_replace('-','',$val[$keys]); $val[$keys] = str_replace(' ','',$val[$keys]); $val[$keys] = str_replace(':','',$val[$keys]); $keysvalue[] =$val[$keys]; } asort($keysvalue); //key值排序 reset($keysvalue); //指標重新指向數組第一個 foreach($keysvalue as $key=>$vals) { $keysort[] = $key; } $keysvalue = array(); $count=count($keysort); if(strtolower($type) != 'asc'){ for($i=$count-1; $i>=0; $i--) { $keysvalue[] = $array[$keysort[$i]]; } }else{ for($i=0; $i<$count; $i++){ $keysvalue[] = $array[$keysort[$i]]; } } return $keysvalue; } |
例如有下列這樣一個數組:
代碼如下 |
|
$array=array( 0=>array('id'=>8,'username'=>'phpernote'), 1=>array('id'=>9,'username'=>'com'), 2=>array('id'=>5,'username'=>'www') ); 現在需要將這個二維數組按id升序排列,則: array_sort($array,'id','asc'); |