array_multisort(array&$array1 [,mixed $array1_sort_order=SORT_ASC] [,mixed $array1_sort_flags=SORT_REGULAR]);
对多个数组或多维数组进行排序。$array1要排序的数组,$array_sort_order前面数组参数要排列的顺序,默认升序,$array1_sort_flags为$array1参数设定选项(按照什么规则排序),成功时返回true,失败返回false。
描述的比较繁琐,直接看例子会比较容易理解
实例1:
$a=array(3,2,6);
$a = array(
0=>3,
1=>2,
2=>6
);
$b=array(5,7,3)
$b=array(
0=>5,
1=>7,
2=>3
);
将数组写成这种格式有助于下面对函数的理解
运行array_multisort($a,$b)后,打印结果为$a=array(2,3,6),$b=array(7,5,3);
可以这么理解运行结果(两个数组相当于相邻的两根竹子,数组的元素相当于是一个个熊猫,并且两根竹子上的熊猫之间用绳子连接,一只熊猫的位置发生改变,另一只也会相应的改变),这样就很好理解返回结果了。
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
这是一个从数据库查询的数据集合(二维数组),想要按照volume将数组(一行是一个数组array('volume'=>67,'edition'=>2))进行排序:
首先需要将数组处理成按照列排好的数组array(67,86,85,98,86,67);,array(2,1,6,2,6,7);
所以使用foreach循环将数组处理成已列排列的数组
foreach($data as $k => $v){
$volumn[]=$v['volume'];
$edition[]=$v[edition];
}
然后使用array_multisort($volume,$edition,$data),运行完成后就是按照volumn升序后的结果。
因此可以根据这个思想封装一个按照某个字段进行排序的方法,供以后使用
function arraySequence($array, $field, $sort = 'SORT_DESC')
{
$arrSort = array();
foreach ($array as $uniqid => $row) {
foreach ($row as $key => $value) {
$arrSort[$key][$uniqid] = $value;
}
}
array_multisort($arrSort[$field], constant($sort), $array);
return $array;
}
其中$array是原数组,$field是要排序的字段(根据num排序),$sort是排序规则(SORT_DESC降序,SORT_ASC升序),constant()函数是根据名称返回常量的值。
PS:使用这个函数需要注意的是两个数组的元素的个数必须一致,例如$a=array(1,2,3);$b=array(4,5);使用array_multisort($a,$b)就会报错,因为两个数组的元素个数不一致