phpで2次元配列をソートします
わきゃあ
様々な要素を持った配列を日付順や複合的にソートしたいときに役立つ(多分)
array_multisortを使用することで、簡単にソートすることができます。
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
単一条件でソート
適当な配列データを用意しました。
"date"を時間が最新日付順に並び替えてみます。
<?php
//サンプルデータ
$sampleArr = array(
0 => array(
"date" => '2008-01-04',
"name" => 'john',
"age" => 10
),
1 => array(
"date" => '2008-10-21',
"name" => 'suzuki',
"age" => 2
),
2 => array(
"date" => '2007-07-03',
"name" => 'sato',
"age" => 98
),
3 => array(
"date" => '2017-07-03',
"name" => 'mochita',
"age" => 34
)
);
// 日付のみでソートする場合
foreach ($sampleArr as $key => $row) {
$date[$key] = $row["date"];
}
// 日付が早い順に並び替える
array_multisort($date, SORT_ASC, $sampleArr);
?>
配列のkeyと並び替えをしたい要素のみの配列を用意し、その配列を使用してソートを行います。
並び替え用の配列$dateの中身
Array
(
[0] => 2008-01-04
[1] => 2008-10-21
[2] => 2007-07-03
[3] => 2017-07-03
)
複数条件のソート
これを応用した形で、複数条件でソートすることができます。
<?php
$sampleArr = array(
0 => array(
"date" => '2008-01-04',
"name" => 'john',
"age" => 10
),
1 => array(
"date" => '2008-10-21',
"name" => 'suzuki',
"age" => 2
),
2 => array(
"date" => '2007-07-03',
"name" => 'sato',
"age" => 98
),
3 => array(
"date" => '2017-07-03',
"name" => 'mochita',
"age" => 34
)
);
// 名前でソートし、年齢でソートし、日付でソートする
foreach ($sampleArr as $key => $row) {
$name[$key] = $row["name"];
$age[$key] = $row["age"];
$date[$key] = $row["date"];
}
array_multisort($name, SORT_DESC, $age, SORT_DESC, $date, SORT_DESC, $sampleArr);
?>
中身
Array
(
[0] => Array
(
[date] => 2008-10-21
[name] => suzuki
[age] => 2
)
[1] => Array
(
[date] => 2007-07-03
[name] => sato
[age] => 98
)
[2] => Array
(
[date] => 2017-07-03
[name] => mochita
[age] => 34
)
[3] => Array
(
[date] => 2008-01-04
[name] => john
[age] => 10
)
)