PHP使用array_multisort对二维数组进行排序

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)就会报错,因为两个数组的元素个数不一致

 

 

你可能感兴趣的:(php)