PHPでは、usort関数には2つの引数があります:配列からソート、コールバックです。コールバックには、$ aと$ bの2つの引数もあります。次に、私たちが望む方法でこれら2つを比較します。 usortのこのユースケースはあまり一般的ではないので、常に私を驚かせます。通常は、値を同じプロパティでソートするか、$ aと$ bの両方で同じロジックを使用します。例えば、我々は長さによってソートする場合:PHPには単純なソートがありますか?
$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ですか? $ aと$ bをソートするには-2という数字をどのように使いますか?申し訳ありませんが、私はあなたがここで質問をしていることを知っていますが、私は非常に興味があります。 – frosty
@Andrewあなたは正しいですが、私は何かを逃していないと確信しています。ここの「なぜ」というのは、「私は何かを逃していますか?」という意味です。 –