PHP-usort多维数组

问题描述 投票:0回答:1

我正在尝试使用以下usort函数以voucherdate和vouchernumber降序对数组进行排序

usort($voucherdata, function($a, $b) {
   return [$b['voucherdate'], $b['vouhcernumber']] <=> [$a['voucherdate'], $a['vouhcernumber']];
});

但是某些值的排列顺序不正确。如下面的输出所示:

0: {vouchernumber: "51", vouchertype: "JV", voucherdate: "2020-05-15", enteries: Array(2)}
1: {vouchernumber: "39", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
2: {vouchernumber: "50", vouchertype: "JV", voucherdate: "2020-05-14", enteries: Array(2)}
3: {vouchernumber: "49", vouchertype: "JV", voucherdate: "2020-05-14", enteries: Array(2)}
4: {vouchernumber: "48", vouchertype: "JV", voucherdate: "2020-05-14", enteries: Array(2)}
5: {vouchernumber: "33", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(4)}
6: {vouchernumber: "38", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
7: {vouchernumber: "34", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
8: {vouchernumber: "37", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
9: {vouchernumber: "35", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}

我希望的输出是:

0: {vouchernumber: "51", vouchertype: "JV", voucherdate: "2020-05-15", enteries: Array(2)}
1: {vouchernumber: "39", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
2: {vouchernumber: "50", vouchertype: "JV", voucherdate: "2020-05-14", enteries: Array(2)}
3: {vouchernumber: "49", vouchertype: "JV", voucherdate: "2020-05-14", enteries: Array(2)}
4: {vouchernumber: "48", vouchertype: "JV", voucherdate: "2020-05-14", enteries: Array(2)}
5: {vouchernumber: "38", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
6: {vouchernumber: "37", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
7: {vouchernumber: "33", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(4)}
8: {vouchernumber: "35", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}
9: {vouchernumber: "34", vouchertype: "BV", voucherdate: "2020-05-14", enteries: Array(2)}

我如何改进usort函数以获得所需的结果?

php arrays sorting usort
1个回答
-1
投票

您可以尝试使用array_multisort代替usort

array_multisort(
    array_column($voucherdata, 'voucherdate'),
    SORT_DESC,
    array_column($voucherdata, 'vouchernumber'),
    SORT_NATURAL,
    SORT_DESC,
    $voucherdata
);

var_dump($voucherdata);
© www.soinside.com 2019 - 2024. All rights reserved.