PHP入門 配列関数 配列の内容を並べ替える(sort関数)

配列の内容を並べ替える「sort」「rsort」「asort」「arsort」「ksort」「krsort」について解説しています、

構文:ソート関数

sort(array &$array [, int $flags= SORT_REGULAR]):bool
&$arrayソート対象の配列
$flags比較の方法

ソート方法

設定値概要
SORT_REGULAR型を変更せずに値をソート
SORT_NUMERIC数値としてソート
SORT_STRING文字列としてソート
SORT_LOCALE_STRING文字列としてソート(現在のロケールに準拠)
SORT_NATURAL文字列としてソート(自然順)
SORT_FLAG_CASE文字列ソートで大文字小文字を区別しない(「SORT_STRING|SORT_FLAG_CASE」のように、SORT_STRING/SORT_NATURALとの組み合わせで利用)

$flagsは省略可能ですが、原則としてSORT_REGULAR以外の値を明示的に指定します。既定のSORT_REGULARでは、’9.5E2’や’0xE’のように数値として解釈できてしまう文字列が正しくソートできないためです。

ソート関連の関数

関数名順序ソートキー主な対象キーの維持
sort昇順通常配列×
rsort降順通常配列×
asort昇順連想配列
arsort降順連想配列
ksort昇順キー連想配列
krsort降順キー連想配列

sort/rsortは、主に通常配列をソートするための関数です。連想配列のソートにも使えますがソートによってはキーを振り直してしまうので、連想配列をsort/rsort関数でソートするのはあまり意味がありません。ソートの前後でキーを維持するには、asort/arsort、ksort/krsort関数を使います。前者は値をソートするための、後者はキーをソートするための関数です。

例:sort/rsort関数で通常配列ソート

もともとの配列にかかわらずソート後では先頭からインデックス番号を振り直しています。

<?php
$data = ['Tennis', 'Swimming', 'Soccer','Baseball'];
sort($data, SORT_STRING);
print_r($data);

rsort($data, SORT_STRING);
print_r($data);
実行結果
実行結果

例:asort/ksort関数で連想配列をソートした場合

<?php
$data1 = ['Tennis' => 1, 'Swimming' => 1, 'Soccer' => 11, 'Baseball' => 9];
$data2 = ['Tennis' => 1, 'Swimming' => 1, 'Soccer' => 11, 'Baseball' => 9];
asort($data1, SORT_NUMERIC);
print_r($data1);

ksort($data2, SORT_STRING);
print_r($data2);
実行結果
実行結果

自然順ソート

自然順ソートとは、文字列と数値混在の値を、より人間が行うのに近い手法で並べ替える手法を言います。

<?php
$data1 = ['img15.png','img5.png','img2.png','img18.png','img3.png'];
$data2 = ['img15.png','img5.png','img2.png','img18.png','img3.png'];
sort($data1, SORT_STRING);
print_r($data1);

sort($data2, SORT_NATURAL);  //自然順ソート
print_r($data2);
実行結果
実行結果