在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你是對的,但是當我確定我沒有錯過什麼。這裏的「爲什麼」意思是「我錯過了什麼?」。 –