【PHP8.x】rsort関数の使い方

作成日: 更新日:

『rsort関数は、配列の要素を降順、つまり大きいものから小さいものの順に並び替える処理を実行する関数です。この関数は、第一引数として渡された配列そのものを直接変更し、キーと値の関連付けは維持されません。ソート後の配列では、要素は0から始まる連続した数値のインデックスに再割り当てされます。関数の戻り値は、ソートされた配列ではなく、処理が成功したかどうかを示すブール値であり、成功した場合はtrueを、失敗した場合はfalseを返します。したがって、ソート結果は元の配列変数を参照することで確認する必要があります。また、オプションの第二引数にフラグを指定することで、ソートの動作を細かく制御できます。例えば、SORT_NUMERICフラグを指定すると要素は数値として比較され、SORT_STRINGを指定すると文字列として比較されます。デフォルトではSORT_REGULARが適用され、通常の比較ルールに従って要素が並び替えられます。この関数は、スコアを高い順に表示するなど、データを逆順に整列させたい場合に有用です。』

基本的な使い方

構文(syntax)

<?php
$array = [3, 1, 4, 1, 5, 9];
rsort($array);
?>

引数(parameters)

array &$array, int $flags = SORT_REGULAR

  • array &$array: ソート対象の配列。参照渡しのため、関数内で変更された配列がそのまま返されます。
  • int $flags = SORT_REGULAR: ソート順序を指定するフラグ。デフォルトはSORT_REGULARで、要素を通常通り比較します。

戻り値(return)

bool

配列を降順にソートした結果を返します。ソートが成功した場合は true を、失敗した場合は false を返します。

サンプルコード

PHP rsort関数で配列を降順ソートする

<?php

/**
 * rsort関数の使用例を示します。
 * この関数は、配列の要素を逆順 (降順) にソートします。
 *
 * @return void
 */
function demonstrateRsort(): void
{
    // ソート前の数値配列を定義します。
    $numbers = [3, 1, 4, 1, 5, 9, 2, 6];
    echo "元の配列 (数値): " . implode(", ", $numbers) . "\n";

    // rsort関数を使用して、配列を数値として降順にソートします。
    // 第二引数のSORT_NUMERICは、要素を数値として比較することを指定します。
    // rsortは配列自体を変更し、成功した場合はtrue、失敗した場合はfalseを返します。
    $successNumbers = rsort($numbers, SORT_NUMERIC);

    if ($successNumbers) {
        echo "ソート後の配列 (数値、降順): " . implode(", ", $numbers) . "\n\n";
    } else {
        echo "数値配列のソートに失敗しました。\n\n";
    }

    // ソート前の文字列配列を定義します。
    $fruits = ["orange", "apple", "grape", "banana"];
    echo "元の配列 (文字列): " . implode(", ", $fruits) . "\n";

    // rsort関数を使用して、配列を文字列として降順にソートします。
    // 第二引数のSORT_STRINGは、要素を文字列として比較することを指定します。
    $successFruits = rsort($fruits, SORT_STRING);

    if ($successFruits) {
        echo "ソート後の配列 (文字列、降順): " . implode(", ", $fruits) . "\n";
    } else {
        echo "文字列配列のソートに失敗しました。\n";
    }
}

// rsort関数の使用例を実行します。
demonstrateRsort();

?>

PHPのrsort関数は、配列の要素を逆順(降順)にソートするために使用されます。この関数は、指定された配列自体を直接変更する(参照渡し)点が特徴です。

第一引数$arrayには、ソートしたい配列を指定します。この引数には&が付いているため、関数が実行されると元の配列の内容がソートされた結果に置き換えられます。

第二引数$flagsはオプションで、ソートの比較方法を指定します。例えば、SORT_NUMERICを指定すると要素を数値として比較し、SORT_STRINGを指定すると文字列として比較してソートします。この指定によって、期待通りの順序でソートが行われます。

戻り値はブール型(bool)で、ソート処理が成功した場合はtrueを、失敗した場合はfalseを返します。これにより、ソートが正しく行われたかを確認し、必要に応じてエラーハンドリングを行うことができます。

提示されたサンプルコードでは、まず数値の配列をSORT_NUMERICフラグで降順にソートする例が示されています。次に、文字列の配列をSORT_STRINGフラグで降順にソートする例も紹介されており、ソート前後の配列の内容がimplode()関数によってわかりやすく表示されています。この関数を理解することで、データの並べ替え処理を効率的に実装できるようになります。

rsort関数は、渡された配列そのものを降順にソートするため、元の配列は直接変更される点に注意が必要です。ソートされた新しい配列が返されるのではなく、ソート処理が成功したかどうかを真偽値で返しますので、戻り値の確認が重要です。第二引数にSORT_NUMERICSORT_STRINGを指定すると、数値や文字列として正確に比較でき、意図しないソートを防げます。指定がない場合、通常の比較が行われます。また、rsortは配列の数値キーをゼロから再割り当てしますので、元のキーとの関連を保ちたい場合は、別のソート関数を検討してください。

PHP rsortでキーを失う降順ソート

<?php

/**
 * rsort() 関数の使用例を示します。
 * この関数は配列の要素を値で降順(大きいものから小さいものへ)にソートします。
 *
 * 【重要】rsort() を使用すると、元の配列のキーは失われ、
 * 新しい数値キー(0, 1, 2...)が割り当てられます(再インデックスされます)。
 * もし元のキーを保持したまま値で降順ソートしたい場合は、arsort() 関数を使用してください。
 */
function demonstrateRsortUsage(): void
{
    echo "--- 数値インデックス配列の例 (デフォルトの SORT_REGULAR) ---" . PHP_EOL;
    $numbers = [3, 1, 4, 1, 5, 9];
    echo "ソート前: " . implode(", ", $numbers) . PHP_EOL;
    echo "元のキー: ";
    print_r(array_keys($numbers));

    // rsort() を使用して降順にソートします。
    // 第二引数を省略すると、デフォルトで SORT_REGULAR が適用されます。
    // これは、標準的な比較ルールで項目を比較します。
    $success = rsort($numbers);

    if ($success) {
        echo "ソート後: " . implode(", ", $numbers) . PHP_EOL;
        // キーが再インデックスされ、元のキーは失われていることを示します。
        echo "ソート後の配列(キーは再インデックスされます):" . PHP_EOL;
        print_r($numbers);
    } else {
        echo "ソートに失敗しました。" . PHP_EOL;
    }
    echo PHP_EOL;

    echo "--- 連想配列の例 (キーが失われることを確認) ---" . PHP_EOL;
    $grades = [
        "Alice" => 85,
        "Bob" => 92,
        "Charlie" => 78,
        "David" => 92, // Bob と同じ値
    ];
    echo "ソート前: " . PHP_EOL;
    print_r($grades);

    // rsort() は連想配列でも値のみでソートし、元のキーを無視して新しい数値キーを割り当てます。
    $success = rsort($grades);

    if ($success) {
        echo "ソート後(値で降順、キーは再インデックス):" . PHP_EOL;
        print_r($grades);
        echo "元の名前(キー)は失われ、数値キーが割り当てられました。" . PHP_EOL;
    } else {
        echo "ソートに失敗しました。" . PHP_EOL;
    }
    echo PHP_EOL;

    echo "--- 文字列配列の例 (SORT_STRING を明示) ---" . PHP_EOL;
    $words = ["banana", "Apple", "cherry", "Date"];
    echo "ソート前: " . implode(", ", $words) . PHP_EOL;

    // SORT_STRING フラグを指定して、文字列として項目を比較します。
    // PHPのデフォルトの文字列比較では大文字が小文字より優先されるため、
    // 'Date', 'cherry', 'banana', 'Apple' の順になります。
    $success = rsort($words, SORT_STRING);

    if ($success) {
        echo "ソート後 (SORT_STRING): " . implode(", ", $words) . PHP_EOL;
        echo "ソート後の配列(キーは再インデックスされます):" . PHP_EOL;
        print_r($words);
    } else {
        echo "ソートに失敗しました。" . PHP_EOL;
    }
}

// 関数を実行して rsort() の挙動を確認します。
demonstrateRsortUsage();

PHPのrsort()関数は、与えられた配列の要素を、その値に基づいて降順(大きいものから小さいものへ)にソートします。この関数は、引数で渡された配列そのものを変更します(参照渡し)。

rsort()を使用する際の最も重要な点は、ソート後に元の配列のキーが破棄され、新たに数値のキー(0, 1, 2...)が自動的に割り当てられる(再インデックスされる)ことです。もし元のキーを保持したまま値で降順ソートを行いたい場合は、arsort()関数を使用してください。

第1引数&$arrayにはソート対象の配列を指定し、ソート結果はこの配列に上書きされます。第2引数$flagsはオプションで、ソート時の比較方法を定義する整数値です。デフォルトはSORT_REGULARで標準的な比較が行われますが、SORT_STRINGを指定すると文字列として比較されます。この関数はソートに成功した場合はtrueを、失敗した場合はfalseを返します。

サンプルコードでは、数値配列、連想配列、文字列配列の各ケースでrsort()の動作を示しています。特に連想配列の例では、元のキーが失われ、数値キーに置き換わることが確認できます。

rsort関数は配列の値を降順(大きい順)に並べ替えます。最も重要な注意点は、数値・連想配列を問わず、元のキーが破棄され、0から始まる新しい数値キーに置き換えられることです。名前のようなキーと値の関連を維持したままソートしたい場合は、代わりにarsort関数を使用してください。また、この関数は元の配列変数を直接変更する(参照渡し)ため、ソート前の状態を残したい場合は、実行前に配列のコピーが必要です。戻り値はソート後の配列ではなく、処理の成否を示すtrueまたはfalseである点にも注意しましょう。

【PHP8.x】rsort関数の使い方 | いっしー@Webエンジニア