CodeLog

配列のソート

一次元配列

一次元配列のソートをおこないます。ソートの種類は、ソート順・キーの維持・値もしくはキーでソートなどいろいろなソートをおこなうことができます。

値の昇順・キーを維持しない

sort($array, SORT_REGULAR);

配列の値を昇順でソートします。キーを維持しないというのは、キーと値の関係をソート後も維持せずに新たにキーを割り振るという意味です。なのでキーを維持しないソートは主に数字添字配列に利用し、連想配列では使用しません。

sort()関数の引数は1番目がソートする配列、2番目がオプションです。オプションは以下のとおりです。

SORT_REGULAR
通常の比較
SORT_NUMERIC
数値として比較
SORT_STRING
文字列として比較
SORT_NATURAL
文字列として比較(自然順)
SORT_LOCALE_STRING
ロケールに基づいて比較
SORT_FLAG_CASE
大文字と小文字を区別せずに比較。SORT_STRINGやSORT_NATURALと組み合わせて使用。

値の降順・キーを維持しない

rsort($array, SORT_REGULAR);

配列の値を降順でソートします。sort()関数と同様にキーを維持しないため、主に数字添字配列に使用されます。引数もsort()関数と同様です。

値の昇順・キーを維持する

asort($array, SORT_REGULAR);

配列の値を昇順でソートし、ソート後もキーと値の関係を維持します。主に連想配列のソートで使われます。引数はsort()関数と同様です。

値の降順・キーを維持する

arsort($array, SORT_REGULAR);

配列の値を降順でソートし、ソート後もキーと値の関係を維持します。主に連想配列のソートで使われます。引数はsort()関数と同様です。

キーの昇順・キーを維持する

ksort($array, SORT_REGULAR);

配列のキーを昇順でソートします。数字添字配列では意味がないので、基本的に連想配列のソートで使われます。引数はsort()関数と同様です。

キーの降順・キーを維持する

krsort($array, SORT_REGULAR);

配列のキーを降順でソートします。基本的に連想配列のソートで使われます。引数はsort()関数と同様です。

多次元配列

foreach($array as $key => $value){
	$sort[$key] = $value['sortkey'];
}
array_multisort($sort, SORT_ASC, $array);

多次元配列のソートをおこなう場合、まず配列のソートする値をソート用配列に格納します。次にarray_multisort関数を使ってソートをおこないます。array_multisortは数字添字配列の場合はキーを振り直し、連想配列の場合はキーを維持してソートが行われます。

array_multisort関数の引数には1番目にソート用配列、2番目にソート順(SORT_ASC:昇順、SORT_DESC:降順)、3番目にソートする多次元配列を指定します。

多次元配列のソートをよくおこなう場合には関数化しておくと便利です。

funtion array_sort($array, $order, $sortkey){
	foreach($array as $key => $value){
		$sort[$key] = $value[$sortkey];
	}
	if(array_multisort($sort, $order, $array)){
		return $array;
	}
	return false;	
}