配列配列関数(ソート)
- ソート型フラグ
- arsort〔連想キーと要素の関係を維持しつつ配列を逆順にソート〕
- asort〔連想キーと要素の関係を維持しつつ配列をソート〕
- krsort〔配列をキーで逆順にソート〕
- ksort〔配列をーキーでソート〕
- array_multisort〔複数の多次元配列をソート〕
- natcasesort〔大文字小文字を区別せずに、自然順アルゴリズムで配列をソート〕
- natsort〔自然順アルゴリズムで配列をソート〕
- rsort〔配列を逆順にソート〕
- sort〔配列をソート〕
- uasort〔ユーザー定義の比較関数を用いて、配列をソートし連想インデックスを保持〕
- uksort〔ユーザー定義の比較関数を用いて、キーで配列をソート〕
- usort〔ユーザー定義の比較関数を用いて、値で配列をソート〕
ソート型フラグ
unknown
フラグ | 説明 |
---|---|
SORT_REGULAR | 通常通りに項目を比較(型は比較しない) |
SORT_NUMERIC | 数値的に項目を比較 |
SORT_STRING | 文字列として項目を比較 |
SORT_LOCALE_STRING | カレントのロケールに基づき比較。(PHP4.4.0,PHP5.0.2で追加) |
arsort
連想キーと要素の関係を維持しつつ配列を逆順にソート
unknown
連想配列において各配列のキーと要素の関係を維持しつつ、配列を逆順にソートします。 成功した場合にTRUE、失敗した場合にFALSEを返します。 オプションの第2引数ソート型フラグによりソートの動作を指定できます。
<?
$fruit = array("b"=>"banan","c"=>"coconut","a"=>"apple");
asort($fruit); //キーと値の関係を保持しつつ連想配列をソート
reset($fruit); //配列をリセット
print_r($fruit);
//Array ( [c] => coconut [b] => banan [a] => apple )
?>
asort
連想キーと要素の関係を維持しつつ配列をソート
unknown
連想配列において各配列のキーと要素の関係を維持しつつ、配列をソートします。 成功した場合にTRUE、失敗した場合にFALSEを返します。 オプションの第2引数ソート型フラグによりソートの動作を指定できます。
<?
$fruit = array("b"=>"banan","c"=>"coconut","a"=>"apple");
asort($fruit); //キーと値の関係を保持しつつ連想配列をソート
reset($fruit); //配列をリセット
print_r($fruit);
//Array ( [a] => apple [b] => banan [c] => coconut )
?>
krsort
配列をキーで逆順にソート
unknown
配列をキーと値の関係を維持しながらキーで逆順にソートします。 連想配列をキーでソートする場合に便利です。 成功した場合にTRUE、失敗した場合にFALSEを返します。 オプションの第2引数ソート型フラグによりソートの動作を指定できます。
<?
/* 連想配列の場合 */
$fruit = array(
"b"=>"banana",
"c"=>"coconut",
"a"=>"apple"
);
krsort($fruit);
print_r($fruit); // Array ( [c] => coconut [b] => banana [a] => apple )
/* 通常の配列の場合 */
$item = array(
"3"=>"item3",
"1"=>"item1",
"2"=>"item2"
);
krsort($item);
print_r($item); // Array ( [3] => item3 [2] => item2 [1] => item1 )
?>
ksort
配列をーキーでソート
unknown
配列をキーとデータの関係を維持しつつ、キーでソートします。 連想配列をキーで逆順にソートする場合に便利です。 成功した場合にTRUE、失敗した場合にFALSEを返します。 オプションの第2引数ソート型フラグによりソートの動作を指定できます。
<?
/* 連想配列の場合 */
$fruit = array(
"b"=>"banana",
"c"=>"coconut",
"a"=>"apple"
);
ksort($fruit);
print_r($fruit);
// Array ( [a] => apple [b] => banana [c] => coconut )
/* 通常の配列の場合 */
$item = array(
"3"=>"item3",
"1"=>"item1",
"2"=>"item2"
);
ksort($item);
print_r($item);
// Array ( [1] => item1 [2] => item2 [3] => item3 )
?>
array_multisort
複数の多次元配列をソート
unknown
複数の配列または多次元配列を、キーと値の関係を維持したままソートするのに便利です。 連想配列のキーはそのままですが、数値キーの場合は0からの連番に振り直されます。
第1引数配列1は、配列でなければなりません。 その後の各引数には、配列、ソート方向指定フラグ、ソート型フラグのいずれかを指定できますが、 各配列に同じ型のソート型フラグを2つ指定することはできません。
またソート型フラグが適用されるのは、指定された配列のみで、 次の新しい配列を処理する前にデフォルトのSORT_ASCおよびSORT_REGULARにリセットされます。
ソート方向指定フラグ | 説明 | ソート型フラグ | 説明 |
---|---|---|---|
SORT_ASC | 昇順ソート | SORT_REGULAR | 普通に比較 |
SORT_DESC | 降順ソート | SORT_NUMERIC | 数値的に比較 |
SORT_STRING | 文字列として比較 |
<?
/* 複数の配列をソート */
$ar1 = array("10", 100, 100, "a");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
/*
array(4) {
[0]=>string(2) "10"
[1]=>string(1) "a"
[2]=>int(100)
[3]=>int(100)
}
array(4) {
[0]=>int(1)
[1]=>int(1)
[2]=>string(1) "2"
[3]=>int(3)
}
*/
/* 多次元配列をソート */
$ar = array(array("10", 11, 100, 100, "a"),
array(1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
/*
array(2) {
[0]=>
array(5) {
[0]=>string(2) "10"
[1]=>int(100)
[2]=>int(100)
[3]=>int(11)
[4]=>string(1) "a"
}
[1]=>
array(5) {
[0]=>int(1)
[1]=>int(3)
[2]=>string(1) "2"
[3]=>int(2)
[4]=>int(1)
}
}
*/
?>
natcasesort
大文字小文字を区別せずに、自然順アルゴリズムで配列をソート
unknown
配列をキーと値の関係を維持したまま人間が考える順序でソートします。
大文字小文字を区別する場合は、natsort()関数を使用してください。
<?
$array1 = $array2 = array(
"hoge10",
"HOGE0",
"HOGE2",
"hoge100",
"HOGE11"
);
/* sort(通常ソート)の場合 */
sort($array1);
print_r($array1);
//Array ( [0] => HOGE0 [1] => HOGE11 [2] => HOGE2 [3] => hoge10 [4] => hoge100 )
echo "<br>";
/* natcasesort(自然順ソート)の場合 */
natcasesort($array2);
print_r($array2);
//Array ( [1] => HOGE0 [2] => HOGE2 [0] => hoge10 [4] => HOGE11 [3] => hoge100 )
?>
natsort
自然順アルゴリズムで配列をソート
unknown
配列をキーと値の関係を維持したまま人間が考える順序でソートします。 大文字小文字は区別され、小文字より大文字が優先されます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
大文字小文字を区別しない場合は、natcasesort()関数を使用してください。
<?
$array1 = $array2 = array(
"hoge10",
"HOGE0",
"HOGE2",
"hoge100",
"HOGE11"
);
/* sort(通常ソート)の場合 */
sort($array1);
print_r($array1);
//Array ( [0] => HOGE0 [1] => HOGE11 [2] => HOGE2 [3] => hoge10 [4] => hoge100 )
echo "<br>";
/* natsort(自然順ソート)の場合 */
natsort($array2);
print_r($array2);
//Array ( [1] => HOGE0 [2] => HOGE2 [4] => HOGE11 [0] => hoge10 [3] => hoge100 )
?>
rsort
配列を逆順にソート
unknown
配列を逆順にソート(降順)します。キーと値の関係は保持されません。 成功した場合にTRUE、失敗した場合にFALSEを返します。 オプションの第2引数ソート型フラグによりソートの動作を指定できます。
<?
/* 連想配列の場合 */
$fruit = Array("a"=>"apple","b"=>"banana","c"=>"grape");
rsort($fruit);
print_r($fruit);
// アルファベットの降順にソートされますが、キーは維持されません
// Array ( [0] => grape [1] => banana [2] => apple )
/* 通常の配列の場合 */
$item = Array("3"=>"item3","1"=>"item1","2"=>"item2");
rsort($item);
print_r($item);
// 数値の降順にソートされますが、キーは維持されません
// Array ( [0] => item3 [1] => item2 [2] => item1 )
?>
sort
配列をソート
unknown
配列をソート(昇順)します。キーと値の関係は保持されません。 成功した場合にTRUE、失敗した場合にFALSEを返します。 オプションの第2引数ソート型フラグによりソートの動作を指定できます。
<?
/* 連想配列の場合 */
$input = Array(
"f"=>"aaa",
"c"=>"ccc",
"a"=>"aaa",
"d"=>"ddd",
"e"=>"eee"
);
sort($input);
print_r($input);
// アルファベットの昇順にソートされますが、キーは維持されません
// Array ( [0] => aaa [1] => aaa [2] => ccc [3] => ddd [4] => eee )
/* 通常の配列の場合 */
$item = Array(
"2"=>"item2",
"1"=>"item1",
"3"=>"item3"
);
sort($item);
print_r($item);
// 数値の昇順にソートされますが、キーは維持されません
// Array ( [0] => item1 [1] => item2 [2] => item3 )
?>
uasort
ユーザー定義の比較関数を用いて、配列をソートし連想インデックスを保持
unknown
キーと値の関係を維持するような配列をソートします。 成功した場合にTRUE、失敗した場合にFALSEを返します。 この関数は、連想配列をソートするのに便利です。 オプションの第2引数比較関数は、ユーザー定義関数を使用する場合に指定します。
uksort
ユーザー定義の比較関数を用いて、キーで配列をソート
unknown
ユーザー定義の比較関数を用いて配列をソートします。 成功した場合にTRUE、失敗した場合にFALSEを返します。 ソートしたい配列を複雑な基準でソートする場合に便利です。
第2引数比較関数は、配列のキーペアによって満たされる2つの引数を受け取ります。 第1引数と第2引数が等しいまたは大きいとみなさない場合、 この比較関数は0またはそれより大きな値を返してはいけません。
<?php
function cmp($a, $b){
if ($a == $b) { return 0; }
else return ($a > $b) ? -1 : 1;
}
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value<br>";
}
/*
20: twenty
10: ten
4: four
3: three
*/
?>
usort
ユーザー定義の比較関数を用いて、値で配列をソート
unknown
ユーザー定義の比較関数を用いて、配列をその値でソートします。 キーと値の関係は保持されません。 成功した場合にTRUE、失敗した場合にFALSEを返します。 ソートしたい配列を複雑な基準でソートする場合に便利です。
第2引数比較関数は、第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ0未満、0に等しい、0より大きい整数を返す必要があります。
<?php
function cmp($a, $b){
if ($a == $b) { return 0; }
else return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value<br>";
}
/*
0: 1
1: 2
2: 3
3: 5
4: 6
*/
#多次元配列を使用するusort()の例
function cmp_func($a, $b){
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp_func");
while (list($key, $value) = each($fruits)) {
echo "\$fruits[$key]: ".$value["fruit"]."<br>";
}
/*
$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons
*/
?>