首页 > 文章列表 > PHP数组排序可用usort函数

PHP数组排序可用usort函数

php usort函数 自定义排序
256 2023-07-01

在使用PHP进行数组操作时,排序是非常常见的操作之一。PHP提供了许多不同的排序函数,其中包括了usort函数。usort函数可以按照指定规则对数组进行排序,但与其他排序函数不同的是,它允许用户自定义排序规则。

本文将介绍PHP中usort函数的使用方法以及如何使用usort函数进行自定义排序。

一、usort函数的基本格式

在使用usort函数进行排序时,我们需要注意以下几点:

  • 该函数需要两个参数,第一个参数是需要排序的数组,第二个参数是一个回调函数,用于定义排序规则。
  • 回调函数中需要定义比较两个元素大小的规则,具体来说,需要返回一个整型值,返回值的含义为:
  • 大于0 表示第一个元素比第二个元素大,需要交换位置;
  • 等于0 表示两个元素相等,不需要交换位置;
  • 小于0 表示第一个元素比第二个元素小,不需要交换位置。

谈到这里,我们需要了解一下PHP中的匿名函数。一个匿名函数就是一段代码,它不具备名字,可以被定义并且被存储在变量中。

下面是usort函数的基本格式:

usort(array &$array, callable $cmp_function)

其中,$array 是需要排序的数组,$cmp_function 是用于定义排序规则的回调函数。

二、usort函数的使用示例

下面我们来看一下usort函数的使用示例。

<?php
$fruits = array("apple", "banana", "orange", "peach");

function cmp($a, $b)
{
    return strlen($a) - strlen($b);
}

usort($fruits, "cmp");

print_r($fruits);
?>

在上例中,我们首先定义了一个数组$fruits,包含了四个水果。接下来,我们定义了一个回调函数cmp,用于实现按字符串长度从小到大排序的规则。在usort函数中,我们将$fruits数组和cmp函数作为参数传递进去,函数执行后,$fruits数组将按照字符串长度从小到大的规则进行排序。

运行结果如下:

Array
(
    [0] => apple
    [1] => peach
    [2] => banana
    [3] => orange
)

三、使用usort函数进行自定义排序

除了使用usort函数进行普通排序外,我们还可以根据自己的需要定义自定义排序规则。

下面是一个例子,我们通过usort函数将一个包含了人名和年龄的二维数组按照年龄从小到大排序。

<?php
$people = array(
    array('name' => 'Jim', 'age' => 23),
    array('name' => 'Tom', 'age' => 18),
    array('name' => 'Lucy', 'age' => 26),
    array('name' => 'Lily', 'age' => 20),
);

function cmp($a, $b)
{
    return $a['age'] - $b['age'];
}

usort($people, "cmp");

print_r($people);
?>

在上例中,我们定义了一个二维数组$people,包含了人名和年龄两个字段。接下来,我们定义了一个回调函数cmp,用于实现按照年龄从小到大排序的规则。函数中返回的是$a['age'] - $b['age'],表示将数组按照年龄从小到大排序。

运行结果如下:

Array
(
    [0] => Array
        (
            [name] => Tom
            [age] => 18
        )

    [1] => Array
        (
            [name] => Lily
            [age] => 20
        )

    [2] => Array
        (
            [name] => Jim
            [age] => 23
        )

    [3] => Array
        (
            [name] => Lucy
            [age] => 26
        )

)

可以看到,按照我们定义的规则,$people数组已经按照年龄从小到大排序了。

通过上面的例子,我们可以发现,usort函数具有非常强大的自定义排序能力,只需要简单地定义一个回调函数,即可实现不同的排序规则。但需要注意的是,回调函数需要返回一个整型值,才能保证函数能够正常工作。