【问题标题】:Sort a multidimensional array by two variables按两个变量对多维数组进行排序
【发布时间】:2017-12-25 07:25:53
【问题描述】:

我有一个如下所示的数组,但它可能包含更多草稿。

$multi_arr = array(
    'draft1' => array (
        'alloc_coeff' => 560,
        'steps_count' => 2,
        'order_draft' => array(
            '0' => array(
                'whse_id' => 4,
                'quantity' => 0,
                'percent' => 0
            ),
            '1' => array(
                'whse_id' => 1,
                'quantity' => 10,
                'percent' => 66.666666666667
            )           
        )
    ),
    'draft2' => array (
        'alloc_coeff' => 1517,
        'steps_count' => 1,
        'order_draft' => array(
            '0' => array(
                'whse_id' => 1,
                'quantity' => 10,
                'percent' => 66.666666666667
            )      
        )
    ),
    'draft3' => array (
        'alloc_coeff' => 559,
        'steps_count' => 2,
        'order_draft' => array(
            '0' => array(
                'whse_id' => 2,
                'quantity' => 0,
                'percent' => 0
            ),
            '1' => array(
                'whse_id' => 1,
                'quantity' => 10,
                'percent' => 66.666666666667
            )           
        )
    )
);

我需要使用两个变量对内容进行排序:alloc_coeffsteps_count

首先alloc_coeff需要从最高值到最低值来考虑。

然后作为第二个变量,steps_count 从最低值到最高值。

usort($multi_arr, function($a, $b) {
    return $a['alloc_coeff'] <=> $b['alloc_coeff'];
});

我不需要重写整个数组并将其存储在临时变量中,我只需要像这样排序的键(预期结果)draft2draft1,最后是draft3

有什么方法可以做到这一点?

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:

    你可以这样做:-

    array_multisort(array_column($multi_arr, 'alloc_coeff'), SORT_DESC,
                    array_column($multi_arr, 'steps_count'), SORT_ASC,
                    $multi_arr);
    

    输出:- https://eval.in/924894https://eval.in/924892

    注意:- 在 5.6.23 和 PHP 7.0.8 中测试

    【讨论】:

    • 哇!就是这么简单!谢谢。
    • @Borsn 很高兴为您提供帮助:):)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多