PHP:array_multisort()对多维数组重新排序

日常的工作中,PHP经常会需要对复杂的数据重新排序处理。

可以使用PHP的array_multisort()对多个数组或多维数组进行重新排序

关联(string)键名保持不变,但数字键名会被重新索引。 
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。——这句话是理解此函数用法的关键。

第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。

排序顺序标志: 
■SORT_ASC - 按照上升顺序排序 
■SORT_DESC - 按照下降顺序排序

排序类型标志: 
■SORT_REGULAR - 将项目按照通常方法比较 
■SORT_NUMERIC - 将项目按照数值比较 
■SORT_STRING - 将项目按照字符串比较

每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。

$num1 = array(3, 5, 4, 3);
$num2 = array(27, 50, 44, 78);
array_multisort($num1, SORT_ASC, $num2, SORT_DESC);
print_r($num1);
print_r($num2);
//result: Array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 ) Array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 )

对多维数组(以二位数组为例)进行排序:

先看下结果(左边是未排序之前的数组,右边是排序过后的数组,按照price从大到小排序)

QQ截图20170508104853.png


下面是排序处理源码,最终得到上图的排序结果

	foreach ($out_arr['data'] as $k => $v) {
		$arr[] = $v['son']['price'];			//将需要排序的字段压入空数组
	}
			
	array_multisort($arr,SORT_DESC,SORT_NUMERIC,$out_arr['data']);
//	参数:1.排序数据,2.排序方式,3将每一项按数字顺序排列,4.数据源

QQ截图20170508105532.png

点赞

发表评论