PHP 配列ソートの基本:sort と rsort
PHP には配列をソートする関数が多数用意されています。最も基本的なのが sort() と rsort() です。どちらも配列を直接変更し、新しい配列を返すのではなく元の配列を書き換えます。
$numbers = [3, 1, 4, 1, 5, 9, 2, 6];
sort($numbers);
print_r($numbers);
// [1, 1, 2, 3, 4, 5, 6, 9]
$numbers = [3, 1, 4, 1, 5, 9, 2, 6];
rsort($numbers);
print_r($numbers);
// [9, 6, 5, 4, 3, 2, 1, 1]sort() は昇順(小さい順)、rsort() は降順(大きい順)にソートします。文字列の配列でも同様に使えます。
キーの再インデックス
sort() と rsort() はキーを 0 から振り直します。連想配列で使うとキーが失われるため注意が必要です。
$prices = ['apple' => 150, 'banana' => 80, 'orange' => 120];
sort($prices);
print_r($prices);
// [80, 120, 150](キーが 0, 1, 2 に変わる)連想配列のキーを保持したい場合は asort() や arsort() を使います。
ソートフラグ
第 2 引数でソートの比較方法を指定できます。
$values = ['10', '2', '1', '20'];
// 通常のソート(文字列として比較)
sort($values);
// ['1', '10', '2', '20']
// 数値としてソート
sort($values, SORT_NUMERIC);
// ['1', '2', '10', '20']
// 自然順ソート(人間が期待する順序)
sort($values, SORT_NATURAL);
// ['1', '2', '10', '20']主なフラグは以下の通りです。
| フラグ | 説明 |
|---|---|
| SORT_REGULAR | 型に応じた通常の比較 |
| SORT_NUMERIC | 数値として比較 |
| SORT_STRING | 文字列として比較 |
| SORT_NATURAL | 自然順(file1, file2, file10 の順) |
| SORT_FLAG_CASE | 大文字小文字を区別しない |
戻り値
sort() は成功すると true を返しますが、この戻り値を使うことはほとんどありません。ソート後の配列を取得するには、元の変数をそのまま使います。
$numbers = [3, 1, 2];
sort($numbers);
// $numbers が [1, 2, 3] に変わっている元の配列を保持したい場合は、事前にコピーを作っておく必要があります。