PHPで2次元連想配列をソートする方法

スポンサーリンク

2次元連想配列ソート

こんにちは、てっちーです。今回はPHPで2次元連想配列のソートをする方法を紹介したいと思います。2次元連想配列はキーや値が入れ子のようになっているので、どれでソートするか指定する必要があり、ちょっと複雑です。でも方法を知ってしまえば簡単なので参考にしてみてください。

2次元連想配列のソート

多次元連想配列のソートの場合、キーと値がたくさんあるのでソートする対象を指定する必要があります。そこで、ソートするための対象を抽出する関数とその抽出した対象を使ってソートする関数の2つを使ってソートを行います。

2次元配列のソート例

いきなりソート例を紹介します。配列からarray_column関数でソート用のキーを抽出し、それを使ってarray_multisort関数でソートを行っています。

<?
// ソートしたい配列
$list = array(
  array('name'=>'tanaka','Point'=> 320, 'num' => 21),
  array('name'=>'sato','Point'=> 132, 'num' => 18),
  array('name'=>'ito','Point'=> 256, 'num' => 37),
  array('name'=>'suzuki','Point'=> 226, 'num' => 43),
);

// Pointの値でソートする
$SortKey = array_column($list, 'Point');
array_multisort($SortKey, SORT_ASC, $list);
var_dump($list);

ソート対象の抽出 – array_column関数

ソート対象の抽出には、array_column関数を使います。この関数は2次元連想配列からソートに使用するキーの値を抽出します。上記の例では配列中の”Point”キーの値を抽出し、その順番通りに配列を生成します。

array_column(配列,抽出するキー)

ソートの実行 – array_multisort関数

array_multisort関数は複数の配列をソートする関数です。今回はソートの基準となる配列をソートする配列1に入れ、ソートしたい配列をソートする配列2に入れて使用します。実行するとソートの基準となる配列を基にソートする配列の方もそれに合わせソートされることになります。

array_multisort(ソートする配列1, ソート順序, ソートする配列2);

ソート順序

昇順と降順はソート順序で指定します。ソート順序に特定の文字列を記入することで切り替えることができます。下記にその2つの文字があるので、それを参考にして関数の引数として指定してください。

SORT_ASC :昇順

SORT_DESC:降順

ソートの注意点

  1. array_multisortを実行するとどちらの配列も上書きされます
  2. array_column関数でソートの基準となる配列を抽出した後、その配列の順番が変わってしまうと正しくソートできません。ミスしないようになるべく近くに(できれば並べて)記述しましょう。

ソートの実行結果

ソート例を実行した結果を参考までに紹介します。無事にソートされていることが分かります。

<?
array(4) {
  [0]=>
  array(3) {
    ["name"]=>
    string(4) "sato"
    ["Point"]=>
    int(132)
    ["num"]=>
    int(18)
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(6) "suzuki"
    ["Point"]=>
    int(226)
    ["num"]=>
    int(43)
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(3) "ito"
    ["Point"]=>
    int(256)
    ["num"]=>
    int(37)
  }
  [3]=>
  array(3) {
    ["name"]=>
    string(6) "tanaka"
    ["Point"]=>
    int(320)
    ["num"]=>
    int(21)
  }
}

さいごに

今回は2次元連想配列のソート方法を紹介しました。2次元の連想配列はとても便利なので使うことも多いと思いますので、参考にしてみてください。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする