PHP多维数组根据多列排序

<?php

/**
 * 多维多列排序
 * @return mixed
 */
function array_sort()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
        }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

// 示例多维数组
$rights = [
    0 => Array
    (
        'id' => 61,
        'title' => '权益一',
        'level_id' => 20,
        'created_at' => '2019-08-26 11:01:29',
        'low_level' => 1,
        'level_names' => Array
        (
            0 => '初始等级',
            1 => '一星会员',
            2 => '二星会员',
            3 => '三星会员',
            4 => '四星会员',
            5 => '五星会员'
        )
    ),

    17 => Array
    (
        'id' => 78,
        'title' => '权益十八',
        'created_at' => '2019-08-26 11:41:40',
        'low_level' => 2,
        'level_names' => Array
        (
            0 => '初始等级',
            1 => '一星会员',
            3 => '三星会员',
            4 => '四星会员',
        )
    ),

    18 => Array
    (
        'id' => 79,
        'title' => '权益十九',
        'created_at' => '2019-08-26 11:41:49',
        'low_level' => 1,
        'level_names' => Array
        (
            0 => '初始等级',
            1 => '一星会员',
            2 => '二星会员',
            3 => '三星会员',
            4 => '四星会员',
        )
    ),

    19 => Array
    (
        'id' => 80,
        'title' => '权益二十',
        'created_at' => '2019-08-26 11:41:58',
        'low_level' => 3,
        'level_names' => Array
        (
            0 => '初始等级',
            1 => '一星会员',
            2 => '二星会员',
            3 => '三星会员',
            4 => '四星会员',
            5 => '五星会员'
        )
    ),

    20 => Array
    (
        'id' => 81,
        'title' => '权益二十一',
        'created_at' => '2019-08-26 11:41:51',
        'low_level' => 1,
        'level_names' => Array
        (
            0 => '初始等级',
            1 => '一星会员',
            2 => '二星会员',
            3 => '三星会员',
            5 => '五星会员'
        )
    )
];
// 根据 low_level 字段升序排列,相同时再根据 created_at 字段倒序排序
$sortRights = array_sort($rights, 'low_level', SORT_ASC, 'created_at', SORT_DESC);
// 打印
echo '<pre>';
print_r($sortRights);
echo '</pre>';
// 排序后的数组

Array
(
    [0] => Array
        (
            [id] => 81
            [title] => 权益二十一
            [created_at] => 2019-08-26 11:41:51
            [low_level] => 1
            [level_names] => Array
                (
                    [0] => 初始等级
                    [1] => 一星会员
                    [2] => 二星会员
                    [3] => 三星会员
                    [5] => 五星会员
                )

        )

    [1] => Array
        (
            [id] => 79
            [title] => 权益十九
            [created_at] => 2019-08-26 11:41:49
            [low_level] => 1
            [level_names] => Array
                (
                    [0] => 初始等级
                    [1] => 一星会员
                    [2] => 二星会员
                    [3] => 三星会员
                    [4] => 四星会员
                )

        )

    [2] => Array
        (
            [id] => 61
            [title] => 权益一
            [level_id] => 20
            [created_at] => 2019-08-26 11:01:29
            [low_level] => 1
            [level_names] => Array
                (
                    [0] => 初始等级
                    [1] => 一星会员
                    [2] => 二星会员
                    [3] => 三星会员
                    [4] => 四星会员
                    [5] => 五星会员
                )

        )

    [3] => Array
        (
            [id] => 78
            [title] => 权益十八
            [created_at] => 2019-08-26 11:41:40
            [low_level] => 2
            [level_names] => Array
                (
                    [0] => 初始等级
                    [1] => 一星会员
                    [3] => 三星会员
                    [4] => 四星会员
                )

        )

    [4] => Array
        (
            [id] => 80
            [title] => 权益二十
            [created_at] => 2019-08-26 11:41:58
            [low_level] => 3
            [level_names] => Array
                (
                    [0] => 初始等级
                    [1] => 一星会员
                    [2] => 二星会员
                    [3] => 三星会员
                    [4] => 四星会员
                    [5] => 五星会员
                )

        )

)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值