我正在尝试实现一个函数,该函数将按词法顺序对字符串数组进行排序(不区分大小写)。但有一个异常(exception):如果字符串等于,比方说,“bingo!”将此行放在顶部。
我制作了一些在给定的测试数据上运行良好的函数。但我不确定我不会用特殊情况来欺骗自己。请检查我。
<?php
$a = [
'alfa',
'beta',
'gama',
'sigma',
'foo',
'bar',
'bingo!',
];
usort($a, function ($a, $b) {
$cmp = strcasecmp($a, $b);
return $cmp == 0
? 0
: (strcasecmp($a, 'bingo!') == 0
? -1000
: (
strcasecmp($b, 'bingo!') == 0
? 1000
: $cmp
)
);
});
var_export($a);
最佳答案
使用 usort 的解决方案:
$onTop = 'bingo!';
$array = [
'alfa',
'beta',
'gama',
'sigma',
'foo',
'bar',
'bingo!',
];
usort($array,function($a,$b) use($onTop){
$r = ($b == $onTop) <=> ($a == $onTop);
return $r==0 ? strnatcasecmp($a,$b) : $r;
});
var_export($array);
结果:
array (
0 => "bingo!",
1 => "alfa",
2 => "bar",
3 => "beta",
4 => "foo",
5 => "gama",
6 => "sigma",
)
关于php - 用户以具体值(value)高优先级排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60153210/