PHPのuksort()
関数は、コールバック関数を使い、配列の要素を、キーで並べ替える組み込み関数。
キーと値の相関関係を維持したまま、ソートする。
定義
論理型 uksort( 配列型 &$array, コールバック $cmp_function );
パラメータ
- 配列型 &$array
並べ替える対象の配列を指定。
- コールバック $cmp_function
比較に用いるユーザー定義関数を指定。
ここで呼び出すユーザー定義関数は、1つ目の引数と、2つ目の引数を、比較演算子(関係演算子)などを使って比較し、「0」「正の整数」「負の整数」のいづれかを返すようにしなければならない。
戻り値
論理値。
並べ替えに成功すると「TRUE」、失敗すると「FALSE」を返す。
構文
コールバック関数を使い、配列要素を、キーでソート
論理値 = uksort( 配列, コールバック関数 );
「コールバック関数」に指定したユーザー定義関数を使い、「配列」の要素を、キーで並べ替える。
サンプル
連想配列の要素を、文字列キーの昇順でソート
<pre>
<?php
function compare( $a, $b ) {
return strcmp( $a, $b );
}
$varArray = array(
"white" => "白",
"black" => "黒",
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
uksort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>
<?php
function compare( $a, $b ) {
return strcmp( $a, $b );
}
$varArray = array(
"white" => "白",
"black" => "黒",
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
uksort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[black] => 黒
[blue] => 青
[green] => 緑
[red] => 赤
[white] => 白
)
(
[black] => 黒
[blue] => 青
[green] => 緑
[red] => 赤
[white] => 白
)
キーと値の相関関係は、維持したままである点に、注目。
連想配列の要素を、文字列キーの昇順でソート(大文字小文字の取り扱い)
大文字と小文字を区別する場合と、区別しない場合。
<pre>
<?php
function compareA( $a, $b ) {
return strcmp( $a, $b );
}
function compareB( $a, $b ) {
return strcasecmp( $a, $b );
}
$varArray = array(
"white" => "白",
"black" => "黒",
"Red" => "赤",
"Blue" => "青",
"Green" => "緑"
);
echo "大文字小文字を区別すると、<br />";
uksort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
uksort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
<?php
function compareA( $a, $b ) {
return strcmp( $a, $b );
}
function compareB( $a, $b ) {
return strcasecmp( $a, $b );
}
$varArray = array(
"white" => "白",
"black" => "黒",
"Red" => "赤",
"Blue" => "青",
"Green" => "緑"
);
echo "大文字小文字を区別すると、<br />";
uksort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
uksort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
大文字小文字を区別すると、
Array
(
[Blue] => 青
[Green] => 緑
[Red] => 赤
[black] => 黒
[white] => 白
)
大文字小文字を区別しないと、
Array
(
[black] => 黒
[Blue] => 青
[Green] => 緑
[Red] => 赤
[white] => 白
)
Array
(
[Blue] => 青
[Green] => 緑
[Red] => 赤
[black] => 黒
[white] => 白
)
大文字小文字を区別しないと、
Array
(
[black] => 黒
[Blue] => 青
[Green] => 緑
[Red] => 赤
[white] => 白
)
連想配列の要素を、文字列キーでソート(昇順と降順)
<pre>
<?php
function compareA( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? +1 : -1;
}
function compareB( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a < $b ) ? +1 : -1;
}
$varArray = array(
"white" => "白",
"black" => "黒",
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
echo "昇順でソートすると、<br />";
uksort( $varArray, "compareA" );
print_r( $varArray );
echo "降順でソートすると、<br />";
uksort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
<?php
function compareA( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? +1 : -1;
}
function compareB( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a < $b ) ? +1 : -1;
}
$varArray = array(
"white" => "白",
"black" => "黒",
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
echo "昇順でソートすると、<br />";
uksort( $varArray, "compareA" );
print_r( $varArray );
echo "降順でソートすると、<br />";
uksort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
昇順でソートすると、
Array
(
[black] => 黒
[blue] => 青
[green] => 緑
[red] => 赤
[white] => 白
)
降順でソートすると、
Array
(
[white] => 白
[red] => 赤
[green] => 緑
[blue] => 青
[black] => 黒
)
Array
(
[black] => 黒
[blue] => 青
[green] => 緑
[red] => 赤
[white] => 白
)
降順でソートすると、
Array
(
[white] => 白
[red] => 赤
[green] => 緑
[blue] => 青
[black] => 黒
)