二维数组根据某个字段进行排序:array_multisort 的使用

本文介绍两种PHP中对关联数组按年龄字段进行排序的方法。一种是使用array_multisort函数,另一种是利用usort函数结合自定义比较函数实现。这两种方法都能有效对数组中的元素进行升序或降序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假設有如下數組:

我们要根据年龄来排序

排序方法1:

$arr = [
    ['name'=>'tom','age'=>'2'],
    ['name'=>'lisa','age'=>'9'],
    ['name'=>'jerry','age'=>'12'],
    ['name'=>'tony','age'=>'8']
];
$age = array_column($arr,'age');
array_multisort($age,SORT_ASC,$arr);

解析:

首先拿到年级组成的数组:

得到:

使用array_multisort 进行排序:

array_multisort:

第一个参数要排序的数组

第二个参数为排序规则(正序或者倒序)

第三个参数为参数设定选项:

排序类型标志:

  • SORT_REGULAR - 将项目按照通常方法比较(不修改类型)
  • SORT_NUMERIC - 按照数字大小比较
  • SORT_STRING - 按照字符串比较
  • SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。
  • SORT_NATURAL - 以字符串的"自然排序",类似 natsort()
  • SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。

参数可以和 array1_sort_order 交换或者省略,默认情况下是 SORT_REGULAR

...

可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。

它是将第一个参数(数组),根据第二个参数的规则进行排序,然后再根据第一个参数排序后的顺序去排列第三个参数(二位数组)的顺序

得到:


排序方法2:

$arr = [
    ['name'=>'tom','age'=>'2'],
    ['name'=>'lisa','age'=>'9'],
    ['name'=>'jerry','age'=>'12'],
    ['name'=>'tony','age'=>'8']
];
usort($arr,"my_sort");

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

返回

解析:

usort() 通过用户自定义的比较函数对数组进行排序。

如上面的代码 判断$a['age']<$b['age'] 若是成立返回 <=1的数值,反之亦然 那么数组是按照从小到大的排序;

若是要按照从大到小的排序。则要改成

return $a['age']<$b['age']?1:-1;

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值