在PHP中,usort函数有两个参数:array to sort和callback。回调也有两个参数:$ a和$ b。然后,我们以任何我们想要的方式比较这两者。它总是让我感到惊讶,因为usort的这个用例并不常见。我们通常使用相同的属性对值进行排序,或者对$ a和$ b使用相同的逻辑。例如,如果我们想按长度排序:
$animals = ['dog', 'tiger', 'giraffe', 'bear'];
usort($animals, function ($a, $b) {
return strlen($a) - strlen($b);
});
这会奏效,但我们需要说strlen
两次。这样说会更好:
usort($animals, function ($element) {
return strlen($element);
});
或者甚至喜欢这样:
usort($animals, 'strlen');
我自己编写了这种功能(使用PHP 7的好东西,但可以很容易地改为PHP 5):
function simple_usort(array &$array, callable $callback): bool
{
return usort($array, function ($a, $b) use ($callback) {
return $callback($a) <=> $callback($b);
});
}
它运行得很好,但它是不是已经在其他功能中用PHP构建了?如果没有,为什么PHP不支持这种非常流行和方便的排序方式?
答案 0 :(得分:2)
它运行得很好,但它是不是已经在其他功能中用PHP构建了?
没有
如果没有,为什么PHP不支持这种非常流行和方便的排序方式?
语言应该被设计为提供通用工具来完成工作而不提供多种功能来满足某些可能流行或可能不流行的用例,因为性能不是负面的受到这样的决定的影响。
答案 1 :(得分:0)
简单回答:既然没有人请求它,也没有人实现它。
PHP是由拥有补丁的人或激励他人编写补丁的人推动的。如果某个功能对任何人都不感兴趣,则不会被请求,也不会实现。
我相信你想要的功能太具体了,增益太小了。
但是如果你想要它:通过bugs.php.net添加功能请求或通过github提出补丁。