我有这样的数组,
Array
(
[341] => Array
(
[id] => 2034
[name] => Basic
[file] => 577688a31d889.svg
[order] => 12
)
[342] => Array
(
[id] => 2065
[name] => Bold
[file] => 579af7d384970.svg
[order] => 0
)
[344] => Array
(
[id] => 2036
[name] => Modern
[file] => 577688a37fe1b.svg
[order] => 10
)
[1869] => Array
(
[id] => 2066
[name] => Professional
[file] => 579af7d3c0774.svg
[order] => 0
)
[335] => Array
(
[id] => 2033
[name] => Favourites
[file] => 577688a2e0502.svg
[order] => 0
)
[1870] => Array
(
[id] => 2067
[name] => traditional
[file] => 579af7d3f231a.svg
[order] => 0
)
)
我希望按desc
对订单进行排序。但是如果顺序相同,则按名称asc
对其进行排序。而且我也希望保持阵列的关键。我尝试了一些解决方案,但对我来说效果不好,在某些解决方案中它放弃了关键。
usort($data, function($a, $b) {
$rdiff = $a['order'] - $b['order'];
if ($rdiff) return $rdiff;
return $a['name'] - $b['name'];
});
所以根据给定的数组,输出应该是这样的,
341, 344, 342 335, 1869, 1870
。
答案 0 :(得分:2)
使用uasort
和strcasecmp
函数的解决方案:
// $arr is your initial array
uasort($arr, function ($a, $b) {
if ($a['order'] == $b['order']){
return strcasecmp($a['name'], $b['name']);
} else {
return $b['order'] - $a['order'];
}
});
print_r($arr);