【php】配列のソート
配列をSQLの order by のような感覚で並び替えるにはusort を使う。
並び替えの基準となる比較用の関数を定義して、対象の配列と一緒にusort()に渡す。
比較用の関数は0、正の数、負の数のいずれかを返すこと。
ではサンプル。
こんな配列があるとします。
$a = array( array('date' => '2009-01-01', 'name' => '鈴木', 'point' => 100), array('date' => '2009-01-22', 'name' => '佐藤', 'point' => 30), array('date' => '2009-02-05', 'name' => '田中', 'point' => 200), array('date' => '2009-02-02', 'name' => '山本', 'point' => 60), array('date' => '2009-01-11', 'name' => '渡辺', 'point' => 20), );
pointで並び替える
function cmp($x, $y) { return ($x['point'] == $y['point'] ? 0 : ($x['point'] < $y['point'] ? -1 : 1)); } usort($a, 'cmp');
date で並び替える
データベースから取得したなど、もし1桁の月、日が0埋めしてあって、文字列として比較してよいならシンプルにこうできる。
function cmp($x, $y) { return strcmp($x['date'], $y['date']); } usort($a, 'cmp');
もし1桁の月、日が0埋めしてあるとは限らないが、正しい日付型の文字列が渡してもらえる場合、タイムスタンプにしてしまうのも。
function cmp($x, $y) { $v = strtotime($x['date']); $w = strtotime($y['date']); return ($v == $w ? 0 : ($v < $w ? -1 : 1)); } usort($a, 'cmp');
コメント