最終更新日:
公開日:
レシピ
配列
基本的なソート関数で配列を並び替える
PHPが標準で用意している数種類のソート関数で並び替えを行い、ソート関数の違いを比較していきます。
この記事のポイント
- 配列に入っている値をソートする(並び替える)
- 配列の値ではなく「キー」で並び替える
目次
概要
基本的なソート関数は大きく分けると3種類です。
さらに、それぞれの逆順(Reverse)で並び替える関数も用意されており、そちらも含めたら6種類になります。
値でソート
- sort関数 – シンプルに値を基準に並び替える。キーは頭から順に数値が自動的に振られる
- rsort関数 – sort関数と逆順で並び替える。キーの振り方は同じ。
値でソート(キーもセット)
- asort関数 – 値を基準に、対応するキーとセットで並び替える
- arsort関数 – asort関数と逆順で並び替える。キーの扱いは同じ
キーでソート(値もセット)
- ksort関数 – キーを基準に、対応する値とセットで並び替える
- krsort関数 – ksort関数と逆順で並び替える
これらの関数の違いは実行し、比較してみると分かりやすいです。
実際にコードを実行していきましょう。
値でソート
まずはsort関数とrsort関数から実行します。
結果を出力し、どのような並び替えが行われたかを確認してみます。
PHP コード例
// 並び替える配列を用意
$array = array(
'Water' => 100,
'Milk' => 200,
'Coke' => 80,
'Beer' => 120,
);
// 並び替え前の状態を出力
var_dump($array);
// 値を基準にソート
sort($array);
var_dump($array);
// sort関数と逆順にソート
rsort($array);
var_dump($array);
実行結果
解説
出力された結果を見ると、値によって並び替えが実施されたことが分かります。
最初に用意した配列は連想配列ですが、sort関数を実行した後はキーが数値に置き換わっています。
そのため、単純に配列の値を並び替えたい時は便利ですが、キーの扱いには注意が必要です。
値でソート(キーもセット)
次に、asort関数とarsort関数を実行します。
PHP コード例
// 並び替える配列を用意
$array = array(
'Water' => 100,
'Milk' => 200,
'Coke' => 80,
'Beer' => 120,
);
// 並び替え前の状態を出力
var_dump($array);
// 値を基準にソート
asort($array);
var_dump($array);
// asort関数と逆順にソート
arsort($array);
var_dump($array);
実行結果
解説
値によって並び替えを行うのはsort関数と同じですが、今回は値に対応したキーも一緒に並び替えられています。
キーを保持したまま値を並び替えたい時は、こちらの関数が便利です。
キーでソート(値もセット)
最後に、キーの並び替えを行うksort関数とkrsort関数を実行します。
PHP コード例
// 並び替える配列を用意
$array = array(
'Water' => 100,
'Milk' => 200,
'Coke' => 80,
'Beer' => 120,
);
// 並び替え前の状態を出力
var_dump($array);
// キーを基準にソート
ksort($array);
var_dump($array);
// ksort関数と逆順にソート
krsort($array);
var_dump($array);
実行結果
解説
他のソート関数とは異なり、キーを基準にソートが行われました。
対応する値もセットで並び変わります。
英数字や日本語の並び順
値やキーで並び替えを行ってきました。
ここまでは分かりやすい配列を用意してきましたが、実際には値に数値やアルファベット(英字)の大文字・小文字、さらには日本語が混ざっている可能性もあります。
その場合に、どんな順番で並び替わるかを確認してみます。
PHP コード例
// 様々な値を用意
$array = array(
0 => 'b',
1 => 'A',
2 => 8,
3 => 'B',
4 => 'お',
5 => 'a',
6 => 'あ',
7 => 'Y',
8 => '東京都',
9 => 2,
10 => 'ア',
11 => 'z',
12 => 'E',
13 => 'い',
14 => 5.5,
15 => '北海道',
16 => 'う',
17 => 'イ',
18 => 'U',
);
// 並び替え前の状態を出力
var_dump($array);
// 値を基準にソート
asort($array);
var_dump($array);
// 逆順にソート
arsort($array);
var_dump($array);
実行結果
解説
実行してみると、次の順に並んでいることが確認できます。
- アルファベットの大文字 – A〜Z
- アルファベットの小文字 – a〜z
- ひらがな – あ〜ん
- カタカナ – ア〜ン
- 漢字
- 数字(浮動小数点を含む) – 昇順
逆順で並び替えた場合も、そのまま逆になっていることが分かります。
なお、今回は値の並び替えを行いましたが、キーの並び替えにおいても同じルールで並び替えが行われます。