PHP二维数组排序

在PHP中,对二维数组进行排序可以使用usort()函数,这个函数允许你自定义排序规则。假设你有一个二维数组,并且你想根据数组中的某个特定键进行排序,下面是一个基本的示例:

示例数组

$data = [
    ['name' => 'John', 'age' => 28],
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 34],
];

根据age键排序
你可以使用usort()函数和一个自定义的比较函数来根据age键对数组进行排序:

usort($data, function ($a, $b) {
    return $a['age'] <=> $b['age'];
});
 
print_r($data);

解释
usort()函数接受两个参数:要排序的数组和一个比较函数。
比较函数接收两个参数( a 和 a和 ab),它们是数组中的两个元素。
使用PHP 7引入的太空船操作符(<=>)可以简化比较逻辑:
如果 a [ ′ a g e ′ ] 小于 a['age']小于 a[age]小于b[‘age’],返回-1。
如果 a [ ′ a g e ′ ] 等于 a['age']等于 a[age]等于b[‘age’],返回0。
如果 a [ ′ a g e ′ ] 大于 a['age']大于 a[age]大于b[‘age’],返回1。

根据name键排序
如果你想根据name键进行排序,可以修改比较函数:

usort($data, function ($a, $b) {
    return $a['name'] <=> $b['name'];
});
 
print_r($data);

多重排序
如果你需要根据多个键进行排序,比如先按age排序,再按name排序,可以在比较函数中实现更复杂的逻辑:

usort($data, function ($a, $b) {
    if ($a['age'] === $b['age']) {
        return $a['name'] <=> $b['name'];
    }
    return $a['age'] <=> $b['age'];
});
 
print_r($data);

使用array_multisort()进行排序
array_multisort() 是 PHP 中一个强大的函数,用于对多个数组或多维数组进行排序。它可以对数组中的多个列进行排序,并且支持升序和降序排列。以下是 array_multisort() 的基本用法和一些示例。

基本语法

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, array &$... ]]] )

$array1: 要排序的数组,通过引用传递。
$array1_sort_order: 排序顺序,SORT_ASC 表示升序,SORT_DESC 表示降序。
$array1_sort_flags: 排序类型,常用的有 SORT_REGULAR(默认,按常规顺序比较)、SORT_NUMERIC(按数字比较)、SORT_STRING(按字符串比较)等。

你可以传递多个数组和相应的排序参数。

示例

示例 1:对单个数组排序

虽然 array_multisort() 主要用于多数组排序,但也可以用于单个数组:

$arr = [3, 1, 2];
array_multisort($arr);
print_r($arr);

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

示例 2:对多维数组按某一列排序

假设有一个多维数组,需要根据某一列进行排序:

$data = [
    ['name' => 'John', 'age' => 28],
    ['name' => 'Alice', 'age' => 22],
    ['name' => 'Bob', 'age' => 34],
];
 
// 提取要排序的列
$ages = array_column($data, 'age');
 
// 使用 array_multisort 对多维数组按 age 列排序
array_multisort($ages, SORT_ASC, $data);
 
print_r($data);

输出:

Array
(
    [0] => Array
        (
            [name] => Alice
            [age] => 22
        )
    [1] => Array
        (
            [name] => John
            [age] => 28
        )
    [2] => Array
        (
            [name] => Bob
            [age] => 34
        )
)

示例 3:对多个数组排序

$names = ['John', 'Alice', 'Bob'];
$ages = [28, 22, 34];
 
// 按年龄升序排序,同时调整 names 数组的顺序
array_multisort($ages, SORT_ASC, $names);
 
print_r($names);
print_r($ages);

输出:

Array
(
    [0] => Alice
    [1] => John
    [2] => Bob
)
Array
(
    [0] => 22
    [1] => 28
    [2] => 34
)

注意事项

引用传递:array_multisort() 会通过引用修改传入的数组。
性能:对于大型数组或复杂排序,array_multisort() 可能会有性能开销,需根据实际情况选择合适的排序方法。
多列排序:可以通过多次提取列并传递给 array_multisort() 来实现多列排序。
array_multisort() 是一个非常灵活的工具,适合需要对多维数组或多个相关数组进行复杂排序的场景。


这是我开发的PHP搜索引擎:

PHP全文检索引擎 WindSearch: https://github.com/rock365/windsearch,无需配置,几秒钟就能搭建一个立即可用的PHP站内搜索!

可以帮我点个star嘛~ O(∩_∩)O~谢谢你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值