array_multisort 函数的使用

w3c上的解释

定义和用法

array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。

注释:字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。

注释:您可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。

语法如下:

array_multisort(array1,sorting order,sorting type,array2,array3...)

看了半天的例子还是没怎么看懂,在此举个例子说明下该函数的意思:

有一个多维数组如下:

$guys = [
    [
        'number'=>'1',
        'score' => 90,
        'name'  => 'song',
    ],
    [
        'number'=>'2',
        'score' => 90,
        'name'  => 'dong',
    ],
    [
        'number'=>'3',
        'score' => 80,
        'name'  => 'mong',
    ]
];

三个学生的数据,number代表学号,score是成绩,name是姓名。对学生进行排序,首先按照成绩从高到低,再按照姓名按照字符串从低到高排序,按照我们的要求,那么排好后的顺序应该是:

2、1、3

下面将如何用该函数实现:

首先提取出来成绩和姓名数组。使用该函数,参数中每个数组的长度要一样,否则会报错的。

$scores = array();
$names  = array();

foreach ($guys as $value) {
    $scores[] = $value['score'];
    $names[]  = $value['name'];
}

提取的姓名数组,成绩数组和需要排序的学生数组都是有三项,符合要求。先按照成绩降序,如果成绩相同,再按照名字升序。如果成绩都不相同,那么名字排序是没用的。

array_multisort($scores,SORT_DESC,$names,SORT_ASC,$guys);
print_r($scores);
print_r($names);
print_r($guys);

打印出来的效果如下:

Array
(
    [0] => 90
    [1] => 90
    [2] => 80
)
Array
(
    [0] => dong
    [1] => song
    [2] => mong
)
Array
(
    [0] => Array
        (
            [number] => 2
            [score] => 90
            [name] => dong
        )

    [1] => Array
        (
            [number] => 1
            [score] => 90
            [name] => song
        )

    [2] => Array
        (
            [number] => 3
            [score] => 80
            [name] => mong
        )

)

排序前后,三个数组的顺序都是一一对应的,即三个数组是同步变化的,所以达到了对第三个数组的排序。

原文地址:https://www.cnblogs.com/wyzs/p/5257425.html