如何按订单状态对数组进行排序

亚历克斯

我有一个包含日期、状态和总和的数组:

Array
(
    [0] => Array
        (
            [date] => 2019-07-06 14:01:52
            [status] => paid
            [summ] => 100

        )

    [1] => Array
        (
            [date] => 2019-07-02 12:22:31
            [summ] => 320
            [status] => pending
        )

    [2] => Array
        (
            [date] => 2019-07-01 18:43:58
            [summ] => 100
            [status] => pending
        )

    [3] => Array
        (
            [date] => 2019-06-26 14:01:52
            [status] => canceled
            [summ] => 200
        )

我需要先按状态(1.pending、2.paid、3.canceled)排序这个数组,然后按日期(新的在顶部)。

我需要的订单:

待定 2019-07-02 12:22:31 待定 2019-07-01 18:43:58 已付 2019-07-06 14:01:52 取消 2019-06-26 14:01:52

日期我没有任何问题:

usort($new11, function($a, $b) {
    return strtotime($b['date']) - strtotime($a['date']);
});

但是如何按状态排序我需要的顺序?

谢谢:)

粘液

你可以使用宇宙飞船

<?php

    $new11 = [
        [
            'date' => '2019-07-06 14:01:52',
            'status' => 'paid',
            'summ' => 100,
        ],
        [
            'date' => '2019-07-02 12:22:31',
            'status' => 'pending',
            'summ' => 320,
        ],
        [
            'date' => '2019-07-01 18:43:58',
            'status' => 'pending',
            'summ' => 100,
        ],
        [
            'date' => '2019-06-26 14:01:52',
            'status' => 'canceled',
            'summ' => 200,
        ],
    ];

    $pending = 3;
    $paid = 2;
    $canceled = 1;

    usort($new11, function($a, $b) use ($pending, $paid, $canceled) {
        return (${$b['status']} <=> ${$a['status']}) * 10 +
               (strtotime($b['date']) <=> strtotime($a['date']));
    });


    var_dump($new11);

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章