详解PHP数组的比较函数(usort、uasort、uksort)对数组进行排序

PHP把数据放在一个数组里是好的,但是顺序可能会不一致。

在这种情况下可以使用排序函数usort。

用usort进行排序

usort 是一个回调函数。

指定另一个函数作为函数的参数。

然后,通过比较另一个指定函数的结果来实现排序。

用于对多维数组(而不是一维数组)进行排序。

让我们通过样例代码来看看它的实际动作。

注释中的数字是为了稍后解释。

<?php
function sort_test($right, $left){ // ②
 
    return strcmp($right["sports"], $left["sports"]); // ③
}
 
$sports[0]['sports'] = 'tennis';
$sports[1]['sports'] = 'baseball';
$sports[2]['sports'] = 'swimming';
 
usort($sports, "sort_test"); // ①
 
echo "<pre>";
print_r($sports);
echo "</pre>";
?>

执行结果

Array
(
    [0] => Array
        (
            [sports] => baseball
        )
 
    [1] => Array
        (
            [sports] => swimming
        )
 
    [2] => Array
        (
            [sports] => tennis
        )
 
)

tennis→tennis→swimming的排列被重新排列为baseball→swimming→tennis。

程序的流程是

将要排序的数据放入数组中

用usort调用函数

与函数比较并排序

现在让我们解释一下代码。

① 用usort调用一个函数

指定要排序的数组作为第一个参数,函数名作为第二个参数。

②给被调用函数设置参数

我正在设置 $right 和 $left 变量,它们是什么?

它没有出现在任何地方。

事实上,第一个和第二个参数中的变量名称并不重要。

这是要自动比较的数组数据。

③与strcmp比较

strcmp是PHP的比较函数。

比较结果返回的值有如下不同。

当第一个参数<第二个参数时返回负整数

当第一个参数>第二个参数时返回正整数

当第一个参数=第二个参数时返回0

用usort调用的函数的返回值必须是负整数、正整数或 0。

需要注意的是用usort排序的结果是数组的key也被排序改变了。

详解PHP数组的比较函数(usort、uasort、uksort)对数组进行排序

不改变键值排序(uasort函数)

这是 uasort 函数,用于排序以使数组键不变。

让我们稍微更改一下 usort 示例代码并查看结果。

<?php
function sort_test($right, $left){
 
    return strcmp($right["sports"], $left["sports"]);
}
 
$sports[0]['sports'] = 'tennis';
$sports[1]['sports'] = 'baseball';
$sports[2]['sports'] = 'swimming';
 
usort($sports, "sort_test"); // usort更改为uasort
 
echo "<pre>";
print_r($sports);
echo "</pre>";
?>

执行结果

Array
(
    [1] => Array
        (
            [sports] => baseball
        )
 
    [2] => Array
        (
            [sports] => swimming
        )
 
    [0] => Array
        (
            [sports] => tennis
        )
 
)

比较值的顺序已重新排列。

并且数组的键仍然是原始值。

当您不想更改数组键时使用它。

按键排序(uksort函数)

接下来介绍一下uksort函数,一个key排序的函数。

同样的,我们把usort示例代码稍微改一下,看看结果。

<?php
function sort_test($right, $left){
 
    return strcmp($right, $left); 
}
 
$sports[6]['sports'] = 'tennis';
$sports[4]['sports'] = 'baseball';
$sports[0]['sports'] = 'swimming';
 
uksort($sports, "sort_test"); // usort更改为uksort
 
echo "<pre>";
print_r($sports);
echo "</pre>";
?>

执行结果

Array
(
    [0] => Array
        (
            [sports] => swimming
        )
 
    [4] => Array
        (
            [sports] => baseball
        )
 
    [6] => Array
        (
            [sports] => tennis
        )
 
)

可以看到结果按键名对数组进行排序。

结语

以上就是关于PHP数组使用比较函数对数组进行重新排序的全部内容 。

请运行示例代码,加深理解。

最后编辑于:2023/03/14作者: 烽烟无限