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

作成日: 更新日:

sort関数は、配列の要素を昇順に並べ替えるための関数です。この関数は、引数として渡された配列の要素を小さい方から大きい方へとソートし、元の配列自体を直接変更します。

使用する際は、sort(array &$array, int $flags = SORT_REGULAR) のように記述し、最初の引数にはソートしたい配列を指定します。2番目の引数 $flags はオプションで、ソートの動作を細かく制御するためのフラグです。例えば、SORT_NUMERIC を指定すると配列の要素を数値として比較してソートし、SORT_STRING を指定すると文字列として比較してソートされます。デフォルトでは、通常の比較を行う SORT_REGULAR が適用されます。

この関数の重要な点として、数値キーを持つ配列(添字配列)に対して使用した場合、ソート後に配列のキーが0から始まる連続した数値に再割り当てされることが挙げられます。そのため、元のキーの順序や値との関連性は失われます。また、文字列キーを持つ配列(連想配列)に対して sort 関数を使用すると、値だけがソートされ、キーと値の関連性は破棄され、数値キーが再割り当てされます。連想配列のキーと値の関連性を保持したままソートしたい場合は、asortksort といった別の関数を使用する必要があります。

sort関数は、ソートに成功した場合は true を、失敗した場合は false を返します。配列をシンプルに昇順に並べ替えたい場合に非常に便利ですが、キーの再割り当ての挙動については十分に理解しておくことが重要です。

基本的な使い方

構文(syntax)

<?php
$numbers = [4, 2, 8, 1, 5];
sort($numbers);
print_r($numbers);
?>

引数(parameters)

array &$array, int $flags = SORT_REGULAR

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

戻り値(return)

bool

配列を昇順に並べ替えた場合、成功すればtrueを返します。並べ替えに失敗した場合はfalseを返します。

サンプルコード

PHP sort 関数におけるキーの振る舞いを解説する

<?php

/**
 * PHPのsort関数を使用して配列の値を昇順にソートし、キーがどのように扱われるかを示すサンプルコードです。
 *
 * sort関数は配列の値をソートしますが、キーの扱いに特徴があります。
 * ・元の数値キーは破棄され、ソートされた値に対して新しいゼロベースの数値キーが再割り当てされます。
 * ・元の文字列キーを持つ要素は、ソート後に完全に削除されます。
 * そのため、キーと値の関連性を維持したい場合は、sort関数ではなくasort関数などを検討する必要があります。
 */
function demonstratePhpSortKeyBehavior(): void
{
    // 数値キーと文字列キーが混在する配列を準備します。
    // 値はソートされるとわかりやすいように文字列にしています。
    $data = [
        'apple_key'  => 'apple',
        0            => 'orange', // 元の数値キー0
        'banana_key' => 'banana',
        1            => 'grape',  // 元の数値キー1
        'kiwi_key'   => 'kiwi',
    ];

    echo "--- ソート前の配列の状態 ---\n";
    echo "(キーと値の関連性にご注目ください)\n";
    print_r($data);

    // sort関数を呼び出して配列をソートします。
    // デフォルトの挙動(SORT_REGULAR)で値を昇順にソートします。
    $success = sort($data);

    if ($success) {
        echo "\n--- ソート後の配列の状態 ---\n";
        echo "(sort関数は値を基準に昇順ソートし、キーが以下のように変更されました。)\n";
        echo "・元の数値キーは破棄され、新しいゼロベースの数値キーが割り当てられました。\n";
        echo "・元の文字列キーを持つ要素は削除されました。\n";
        print_r($data);
    } else {
        echo "\n配列のソートに失敗しました。\n";
    }
}

// 関数の実行
demonstratePhpSortKeyBehavior();

PHPのsort関数は、配列の値を昇順に並べ替えるための基本的な機能を提供します。この関数は、第一引数で渡された配列そのものを直接変更する「参照渡し」という方法で動作し、ソートが成功したか失敗したかを真偽値で返します。第二引数にはソート方法を指定するフラグを渡すことができますが、デフォルトでは標準的な比較が行われます。

特に重要なのは、ソート後の配列における「キー」の扱いです。sort関数は、配列の値に基づいて昇順に並べ替えますが、元のキーの関連性は保持しません。具体的には、ソート後の配列には新しいゼロから始まる数値キーが割り当て直されます。さらに、ソート前の配列に存在していた文字列キーを持つ要素は、ソートが実行されると完全に削除されます。

このため、元の配列のキーと値の関連性を維持したままソートを行いたい場合には、sort関数ではなく、asort関数などキーを保持する他のソート関数を検討する必要があります。サンプルコードは、数値キーと文字列キーが混在する配列をsort関数で処理した際に、これらのキーがどのように扱われるかを具体的に示しています。ソート前とソート後の配列の状態を比較することで、sort関数の独特なキー処理の挙動を理解することができます。

PHPのsort関数は配列の値を昇順にソートしますが、元のキーの扱いに大きな特徴があります。この関数を使用すると、元の数値キーは破棄され、ソートされた値に対してゼロベースの新しい数値キーが再割り当てされます。さらに重要な点として、元の文字列キーを持つ要素はソート後に完全に削除されますので、キーと値の関連性が失われることに注意が必要です。配列のキーと値の関連性を維持したままソートを行いたい場合は、asort関数やksort関数などの他のソート関数をご検討ください。また、sort関数はソートが成功したかどうかを真偽値で返しますので、処理の安全性を高めるためにも戻り値を確認することをお勧めします。

PHP sort 連想配列の挙動

<?php

/**
 * PHPの`sort`関数が連想配列にどのように作用するかを示すサンプルコード。
 * `sort`関数は配列の値を昇順にソートしますが、連想配列の場合、
 * 元のキーは失われ、新しい数値キー(0, 1, 2...)が割り当てられます。
 *
 * @return void
 */
function demonstrateSortWithAssociativeArray(): void
{
    // ソート対象の連想配列を準備します。
    // キーは文字列、値は数値です。
    $data = [
        'apple' => 3,
        'banana' => 1,
        'orange' => 2,
        'grape' => 4,
    ];

    echo "--- ソート前 ---" . PHP_EOL;
    print_r($data);

    // `sort`関数を呼び出し、配列をその値に基づいてソートします。
    // 第1引数: ソートする配列への参照 (`&$array`)
    // 第2引数: ソートフラグ (ここではデフォルトの`SORT_REGULAR`を明示的に指定)
    // この関数は配列自体を変更し、成功したかどうかの`bool`を返します。
    $success = sort($data, SORT_REGULAR);

    echo PHP_EOL . "--- ソート後 ---" . PHP_EOL;
    print_r($data);

    if (!$success) {
        echo "エラー: 配列のソートに失敗しました。" . PHP_EOL;
    }

    echo PHP_EOL;
    echo "補足: `sort()`関数を連想配列に使用すると、値でソートされますが、" . PHP_EOL;
    echo "元のキーは失われ、数値キーに再割り当てされます。" . PHP_EOL;
    echo "連想配列のキーを保持したまま値でソートしたい場合は `asort()` を、" . PHP_EOL;
    echo "キーでソートしたい場合は `ksort()` を使用してください。" . PHP_EOL;
}

// 関数を実行して動作を確認します。
demonstrateSortWithAssociativeArray();

PHPのsort関数は、配列の要素を昇順に並び替えるために使用されます。このサンプルコードは、sort関数を連想配列に適用した場合の具体的な挙動を示しています。

demonstrateSortWithAssociativeArray関数内では、最初にキーと値を持つ連想配列$dataを準備し、ソート前の状態を表示します。その後、sort($data, SORT_REGULAR)を呼び出して配列をソートします。

sort関数の第一引数&$arrayは、ソート対象の配列そのものを示し、関数内で配列の内容が直接変更されます。第二引数$flagsはソート時の比較方法を指定するオプションで、ここではデフォルトのSORT_REGULARを使用しています。この関数は、ソートが成功した場合はtrueを、失敗した場合はfalseを戻り値として返します。

連想配列にsort関数を適用すると、配列は「値」に基づいて昇順に並び替えられますが、元のキーは破棄され、新たに0, 1, 2...といった数値のキーが自動的に割り当てられます。ソート後の出力では、値が昇順になっているものの、キーが数値に変わっていることが確認できます。

連想配列のキーを保持したまま値でソートしたい場合はasort()関数を、キーに基づいてソートしたい場合はksort()関数を使用するなど、目的に応じて適切な関数を選択することが重要です。

sort()関数は配列の値を昇順にソートしますが、特に連想配列に使用する際は注意が必要です。この関数は連想配列の値のみでソートし、元のキーは失われ、新しい数値キー(0, 1, 2...)が割り当てられます。そのため、キーと値のペアを保持したい場合は、この関数は適していません。sort()関数は引数として渡された配列自体を直接変更する(参照渡し)ため、元の配列が上書きされます。また、ソートの成否をtrueまたはfalseで返しますので、結果を確認してエラー処理を行うことが推奨されます。連想配列でキーを保持したまま値でソートしたい場合はasort()を、キーでソートしたい場合はksort()を使用するのが適切です。

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