SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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');

関連するメモ

コメント