📜  php 按子值对多维数组进行排序 - PHP (1)

📅  最后修改于: 2023-12-03 14:45:24.030000             🧑  作者: Mango

PHP按子值对多维数组进行排序

在PHP中,我们常常需要对多维数组进行排序。这时,如果希望按照某一个子值进行排序,我们可以使用PHP中的usort函数。

函数介绍
usort ( array &$array , callable $value_compare_func ) : bool
  • $array:需要排序的多维数组。
  • $value_compare_func:比较函数,用于定义排序规则。
比较函数

比较函数需要接收两个参数,它们分别是需要比较的两个元素。函数需要返回一个 int 类型的值,表示两个元素的大小关系。

比较函数的示例:

function cmp($a, $b) {
    if ($a['age'] == $b['age']) {
        return 0;
    }
    return ($a['age'] < $b['age']) ? -1 : 1;
}

上述示例中, cmp 函数按照数组元素的 age 值进行比较。如果两个元素的 age 值相等,函数返回 0,表示两个元素相等。如果 $aage 值小于 $bage 值,函数返回 -1;反之,函数返回 1

排序操作

对多维数组按子值排序的步骤如下:

  1. 定义比较函数,根据需要进行调整。
  2. 使用 usort() 函数按照比较函数的规则,对多维数组进行排序。

排序操作的示例:

$players = array(
    array('name' => 'John', 'age' => 28),
    array('name' => 'Ben', 'age' => 27),
    array('name' => 'Liam', 'age' => 23),
    array('name' => 'Lucas', 'age' => 26),
);

function cmp($a, $b) {
    if ($a['age'] == $b['age']) {
        return 0;
    }
    return ($a['age'] < $b['age']) ? -1 : 1;
}

usort($players, "cmp");

print_r($players);

上述示例中,我们定义了一个 $players 数组,其中每一个元素都是一个由 nameage 两个元素组成的子数组。之后,我们定义了一个 cmp 函数,用于按照 age 值排序。最后,我们使用 usort() 函数对 $players 数组进行排序。排序完毕后,我们使用 print_r() 函数输出排序结果。

程序输出结果:

Array
(
    [0] => Array
        (
            [name] => Liam
            [age] => 23
        )

    [1] => Array
        (
            [name] => Lucas
            [age] => 26
        )

    [2] => Array
        (
            [name] => Ben
            [age] => 27
        )

    [3] => Array
        (
            [name] => John
            [age] => 28
        )
)
总结

PHP中的 usort() 函数可以用于对多维数组按照指定的子值进行排序,只需定义一个比较函数即可。对于需要排序的多维数组,我们可以根据需要进行调整。