Edited at

【サルが書く】phpで2次元配列をソートしようと思います


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
)

)