ホームページ >バックエンド開発 >PHPの問題 >PHPでソートルールを変更する方法

PHPでソートルールを変更する方法

PHPz
PHPzオリジナル
2023-04-11 09:10:58575ブラウズ

PHP は広く使用されているサーバーサイド スクリプト言語であり、主に Web 開発に使用されます。開発中、場合によっては配列またはオブジェクトを並べ替える必要があり、並べ替えルールを変更する方法を知る必要があります。

PHP は、sort()、rsort()、asort()、arsort()、ksort()、krsort() など、いくつかのデフォルトの並べ替え関数を提供します。これらの関数はデフォルトで昇順を使用し、並べ替えルールを直接変更するパラメーターを提供しません。

並べ替えルールを変更する必要がある場合は、PHP の usort() 関数と uasort() 関数を使用してこれを実現できます。 usort() 関数は配列を昇順または降順にソートするために使用でき、uasort() は指定されたルールに従って連想配列をソートするために使用されます。

usort() 関数を例として、PHP の並べ替えルールを変更する方法を紹介します。

まず、配列内の 2 つの要素のサイズを比較するために使用される比較関数を定義する必要があります。戻り値は整数型です。戻り値が 0 より小さい場合は、最初のパラメータが 2 番目のパラメータより小さく、最初のパラメータが 2 番目のパラメータの前に配置されていることを意味します。戻り値が 0 より大きい場合、最初のパラメータが 2 番目のパラメータよりも小さいことを意味します。は 2 番目のパラメータより大きく、最初のパラメータは 2 番目のパラメータの前に配置されます。最初のパラメータは 2 番目のパラメータの後に配置されます。戻り値が 0 に等しい場合は、2 つのパラメータが等しいことを意味し、その順序はは変わらないままです。

たとえば、文字列の長さに応じて並べ替えるために次の比較関数を定義します。

function cmp($a, $b) {
    if (strlen($a) == strlen($b)) {
        return 0;
    }
    return (strlen($a) < strlen($b)) ? -1 : 1;
}

次に、usort() 関数を使用して並べ替えます。 usort() 関数は 2 つのパラメーターを受け入れます。最初のパラメーターはソートされる配列、2 番目のパラメーターは比較に使用される比較関数です。たとえば、次の配列を定義します:

$arr = array("apple", "orange", "banana", "kiwi", "pear");

そして、usort() 関数を使用して並べ替えます:

usort($arr, "cmp");

ここで、配列は文字列の長さに応じて並べ替えられ、最終結果は次のようになります。 :

Array
(
    [0] => kiwi
    [1] => pear
    [2] => apple
    [3] => orange
    [4] => banana
)

ご覧のとおり、配列は文字列の長さに応じて小さいものから大きいものへと並べ替えられます。

比較関数は特定の要件を満たす必要があることに注意してください。まず、2 つのパラメータを受け入れ、整数型の値を返す必要があります。次に、比較関数は推移的である必要があります。つまり、$a が $b より小さく、$b が $c より小さい場合、$a は $c より小さい必要があります。最後に、比較関数は $a と $b の値を変更できません。

usort() 関数を使用して並べ替えを行う場合、匿名関数を使用して比較関数を定義することもできるため、関数の定義にかかる時間と労力を節約できます。例:

usort($arr, function($a, $b) {
    if (strlen($a) == strlen($b)) {
        return 0;
    }
    return (strlen($a) < strlen($b)) ? -1 : 1;
});

つまり、PHP での並べ替えルールの変更は非常に簡単で、必要なのは比較関数を定義することだけです。ソートは、関数名を usort() 関数の 2 番目のパラメーターとして使用することで実行できます。もちろん、匿名関数を使用してコードを簡素化することもできます。

以上がPHPでソートルールを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。