PHPプログラミング

最終更新日:
公開日:

レシピ

配列

基本的なソート関数で配列を並び替える

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

実行結果

解説

実行してみると、次の順に並んでいることが確認できます。

  1. アルファベットの大文字 – A〜Z
  2. アルファベットの小文字 – a〜z
  3. ひらがな – あ〜ん
  4. カタカナ – ア〜ン
  5. 漢字
  6. 数字(浮動小数点を含む) – 昇順

逆順で並び替えた場合も、そのまま逆になっていることが分かります。
なお、今回は値の並び替えを行いましたが、キーの並び替えにおいても同じルールで並び替えが行われます。