2015-11-26 68 views
5

在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不支持这种非常流行和方便的排序方式?

+3

对于最后一部分,您可能想问问php组而不是我们...... lol – Andrew

+0

我从来没有使用过usort,看着这个,我有点困惑于回调函数。 $ a的strlen是3,$ b的strlen是5.所以3-5是-2?它如何使用数字-2对$ a和$ b进行排序?对不起,我知道你是这个问题的人,但我只是很好奇。 – frosty

+0

@Andrew你是对的,但是当我确定我没有错过什么。这里的“为什么”意思是“我错过了什么?”。 –

回答

2

它的工作完美,但不是它已经在一些其他功能的PHP内置?

如果不是,为什么PHP不支持这个非常流行和方便的排序方式?

语言的设计应提供通用工具得到的东西,而无需提供多种功能,以满足特定的使用情况,可能会或可能不会受欢迎完成的,理所当然的性能不会受到影响这样的决定。

+0

那么,PHP提供比我提到的更多的奇特功能。单独的数组在PHP中有很多内置的函数,其中一些不是通用的。 –

+0

@RoboRobok是的,我小心忽略了PHP违反了一些语言设计最佳实践的部分;-) –

0

简单的答案:由于没有人要求它,没有人执行它。

PHP是由有补丁的人或有人激励他人编写补丁驱动的。如果某个功能对于任何人来说都不太有趣,那么它不会被请求,也不会被执行。

我认为你想要的功能太具体,增益太小。

但是,如果你想要它:通过bugs.php.net添加功能请求或通过github提出修补程序。