可能重复:
如何在 php 中对多维数组进行排序
...........
这不是重复的。在stackoverflow上确实有很多关于对多维数组进行排序的问题(我相信我昨天在发布我的问题之前阅读了大部分问题......),但我所看到的没有一个涉及我的特定问题:按可变数字排序的领域。下面@dev-null-dweller 给出的答案就是这样做的。
...........
我正在尝试为 PHP 中的多维数组创建一个灵活的排序函数。
我所追求的灵活性在于排序字段的数量(对于 1、2 或 3 级排序可能是 1、2 或 3),以及这些字段的标识。
这是我的数组的一个示例:
Array
(
[0] => Array
(
[title] => Australia Book
[price] => 209.00
[code] => 3571313
[con] => Australia & Oceania
[ctry] => Australia
)
[1] => Array
(
[title] => New Zealand Book
[price] => 169.00
[code] => 3571346
[con] => Australia & Oceania
[ctry] => New Zealand
)
[2] => Array
(
[title] => Austria Book
[price] => 129.00
[code] => 3571230
[con] => Europe
[ctry] => Austria
)
[3] => Array
(
[title] => Austria Pocket Book
[price] => 119.00
[code] => 3571354
[con] => Europe
[ctry] => Austria
)
[4] => Array
(
[title] => Amsterdam Book
[price] => 59.00
[code] => 3571350
[con] => Europe
[ctry] => Netherlands
)
[5] => Array
(
[title] => Britain
[price] => 59.00
[code] => 3571315
[con] => Europe
[ctry] => Britain
)
)
我有时只需要按标题排序,有时按 ctry 然后标题,有时按 con,然后 ctry 然后标题,等等。
我已经成功地进行了 2 级排序,如下所示:
usort($arrCatalog, array('Catalogs_model', 'multi_compare'));
function multi_compare($a ,$b) {
if ($a['con'] < $b['con']) {
return -1;
} elseif ($a['con'] > $b['con']) {
return 1;
} else {
return strcmp($a['title'], $b['title']);
}
}
第一个问题是如何multi_compare
在从内部调用时将参数传递给函数usort
。
在我们解决这个问题后,我很乐意提供一些关于如何更改multi_sort
身份和/或字段数量的指示。