In PHP, la funzione usort accetta due argomenti: matrice per ordinare e un callback. Il callback accetta anche due argomenti: $ a e $ b. Quindi, confrontiamo questi due in ogni modo che vogliamo. Mi sorprende sempre, perché questo caso d'uso per usort non è troppo comune. Di solito ordiniamo valori con la stessa proprietà o utilizzando le stesse logiche sia per $ a che per $ b. Per esempio, se vogliamo ordinare in base alla lunghezza:C'è un semplice usort in PHP?
$animals = ['dog', 'tiger', 'giraffe', 'bear'];
usort($animals, function ($a, $b) {
return strlen($a) - strlen($b);
});
che funzionerà, ma abbiamo bisogno di dire strlen
due volte. Sarebbe bello dire in questo modo:
usort($animals, function ($element) {
return strlen($element);
});
e neppure come questo:
usort($animals, 'strlen');
Ho scritto questo tipo di funzione me stesso (utilizzando PHP 7 chicche, ma può essere facilmente modificato per PHP 5):
function simple_usort(array &$array, callable $callback): bool
{
return usort($array, function ($a, $b) use ($callback) {
return $callback($a) <=> $callback($b);
});
}
Funziona perfettamente, ma non è già integrato in PHP in qualche altra funzione? In caso contrario, perché PHP non supporta questo modo molto popolare e conveniente di ordinare?
per l'ultima parte, si potrebbe voler chiedere al gruppo php invece di noi ... lol – Andrew
Non ho mai usato usort prima, e guardando questo, sono un po 'confuso dalla funzione di callback. La stringa di $ a è 3, e la stringa di $ b è 5. Quindi 3-5 è -2? Come usa il numero -2 per ordinare $ a e $ b? Scusa, so che sei tu a fare le domande qui, ma sono solo molto curioso. – frosty
@Andrew Hai ragione, ma è quando sono sicuro che non mi manchi qualcosa. Il "perché" qui significa "Mi manca qualcosa?". –