PHP 二位数组按照第二维的某个数值或字母排序

先看个数组:

$data = [
    0 => ['id' => 1, 'name' => 'Alpha'],
    1 => ['id' => 3, 'name' => 'Beta'],
    2 => ['id' => 2, 'name' => 'bank'],
    3 => ['id' => 4, 'name' => 'atomic'],
];

如题目所言,需求一:要按照二维数组中的id排序:

array_multisort(array_column($data,'id'),SORT_DESC,$data);
//第二个参数,SORT_DESC:倒序,SORT_ASC:正序

 打印结果如下:

Array
(
    [0] => Array
        (
            [id] => 4
            [name] => atomic
        )
    [1] => Array
        (
            [id] => 3
            [name] => Beta
        )
    [2] => Array
        (
            [id] => 2
            [name] => bank
        )
    [3] => Array
        (
            [id] => 1
            [name] => Alpha
        )
)

现在需求变了,需求二:要按照name的字母排序:

array_multisort(array_column($data, 'name'), SORT_ASC, SORT_STRING, $data);
// 第三个参数是按照字符串

还有其他的也奉献上:

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

 打印结果如下:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alpha
        )
    [1] => Array
        (
            [id] => 3
            [name] => Beta
        )
    [2] => Array
        (
            [id] => 4
            [name] => atomic
        )
    [3] => Array
        (
            [id] => 2
            [name] => bank
        )
)

细心人的会看到先排序大写,后排小写。如果不满足需求可以先把字符转小写再排序:

array_multisort(array_map('strtolower', array_column($data, 'name')), SORT_ASC, SORT_STRING, $data);

打印结果如下:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alpha
        )
    [1] => Array
        (
            [id] => 4
            [name] => atomic
        )
    [2] => Array
        (
            [id] => 2
            [name] => bank
        )
    [3] => Array
        (
            [id] => 3
            [name] => Beta
        )
)

里面用到了其他的函数,可以搜PHP手册。

个人做了一个博客,里面有更多分享,欢迎点击:www.caohongyuan.cn

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值