php - 如何按订单状态对数组进行排序
问题描述
我有一个包含日期、状态和总和的数组:
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']);
});
但是如何按我需要的顺序按状态排序?
谢谢:)
解决方案
您可以简单地使用array_multisort来实现它:
$test = [
[
'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,
],
];
array_multisort(
array_column($test, 'status'),
SORT_DESC,
array_column($test, 'date'),
SORT_DESC,
$test
);
var_dump($test);
结果将是:
array(4) {
[0]=>
array(3) {
["date"]=>
string(19) "2019-07-02 12:22:31"
["status"]=>
string(7) "pending"
["summ"]=>
int(320)
}
[1]=>
array(3) {
["date"]=>
string(19) "2019-07-01 18:43:58"
["status"]=>
string(7) "pending"
["summ"]=>
int(100)
}
[2]=>
array(3) {
["date"]=>
string(19) "2019-07-06 14:01:52"
["status"]=>
string(4) "paid"
["summ"]=>
int(100)
}
[3]=>
array(3) {
["date"]=>
string(19) "2019-06-26 14:01:52"
["status"]=>
string(8) "canceled"
["summ"]=>
int(200)
}
}