2015-11-26 21 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提出修補程序。