KLUTCHE

【PHP】多次元配列を奥のほうの値で並べ替える方法

1次元の配列のソートはasort関数等で行うことが可能ですが、2次元配列以上を並べ替えたい場合はarray_multisortを使うととても便利です。


array_multisort関数

以下のような配列があります。
配列名を$brothersとします。

array(3) {
  [0]=>
  array(2) {
    ["name"]=>
    string(12) "いちろう"
    ["age"]=>
    string(1) "5"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(12) "さぶろう"
    ["age"]=>
    string(1) "3"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(9) "じろう"
    ["age"]=>
    string(1) "4"
  }
}

$brothersを年齢昇順に並べ替えたい場合は以下のようにします。

まず$brothersから年齢だけを取り出した配列$ageをつくります。

foreach ($brothers as $row) {
	$age[] = $row['age'];
}

そしてarray_multisortの出番です。

array_multisort($age,SORT_ASC,$brothers);

$ageを昇順にソートしてついでに$brothersも同じ順番に入れ替えるようなイメージです。

これで以下のように$brothersがソートされ、上書きされます。

array(3) {
  [0]=>
  array(2) {
    ["name"]=>
    string(12) "さぶろう"
    ["age"]=>
    string(1) "3"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(9) "じろう"
    ["age"]=>
    string(1) "4"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(12) "いちろう"
    ["age"]=>
    string(1) "5"
  }
}

今まで面倒くさい手順を取っていましたが、こんなに便利な関数があったのですね・・・
array_multisortを使いこなすことで、配列をより強力に扱えるようになると思います。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です