uksort()

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>

↓↓↓出力結果↓↓↓

Array
(
    [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>

↓↓↓出力結果↓↓↓

大文字小文字を区別すると、
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>

↓↓↓出力結果↓↓↓

昇順でソートすると、
Array
(
    [black] => 黒
    [blue] => 青
    [green] => 緑
    [red] => 赤
    [white] => 白
)
降順でソートすると、
Array
(
    [white] => 白
    [red] => 赤
    [green] => 緑
    [blue] => 青
    [black] => 黒
)

スポンサード リンク

カテゴリー: PHP, コールバック, ソート, 組み込み関数, 配列 タグ: パーマリンク