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] に変わっている

元の配列を保持したい場合は、事前にコピーを作っておく必要があります。