在PHP中,usort函数有两个参数:数组来排序和回调。回调函数也有两个参数:$ a和$ b。然后,我们以任何我们想要的方式比较这两者。它总让我感到惊讶,因为usort这个用例不太常见。我们通常通过相同的属性对值进行排序,或对$ a和$ b使用相同的逻辑。例如,如果我们想通过长度排序:PHP中是否有简单的usort?
$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不支持这种非常流行和方便的排序方式?
对于最后一部分,您可能想问问php组而不是我们...... lol – Andrew
我从来没有使用过usort,看着这个,我有点困惑于回调函数。 $ a的strlen是3,$ b的strlen是5.所以3-5是-2?它如何使用数字-2对$ a和$ b进行排序?对不起,我知道你是这个问题的人,但我只是很好奇。 – frosty
@Andrew你是对的,但是当我确定我没有错过什么。这里的“为什么”意思是“我错过了什么?”。 –