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);