在PHP中,usort函数需要两个参数:要排序的数组和一个回调函数。回调函数也需要两个参数:$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不支持这种非常流行和方便的排序方式?
function simple_usort(array &$array, callable $callback) { return usort($array, function ($a, $b) use ($callback) { return $callback($a) - $callback($b); }); }
- Mark Bakerusort()
功能,您可以使用它来实现自己的排序函数,无论这些函数是否明智或奇特,就像您已经在这里做的一样。 - Sammitch