php多维数组排序可以用array_multisort() 函数来处理,array_multisort() 函数可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引
排序顺序标志:
SORT_ASC - 按照上升顺序排序
SORT_DESC - 按照下降顺序排序
排序类型标志:
SORT_REGULAR - 将项目按照通常方法比较
SORT_NUMERIC - 将项目按照数值比较
SORT_STRING - 将项目按照字符串比较
例子 1. 对多个数组排序
	  
		|  代码如下 | 
		复制代码 | 
	  
	  
		| 
 
$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.111com.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'); 
 |