uasort()

PHPのuasort()関数は、コールバック関数を使い、配列の要素を、値で並べ替える組み込み関数。

キーと値の相関関係を維持したまま、ソートする。

定義

論理型 uasort( 配列型 &$array, コールバック $cmp_function );

パラメータ

配列型 &$array

並べ替える対象の配列を指定。

コールバック $cmp_function

比較に用いるユーザー定義関数を指定。

ここで呼び出すユーザー定義関数は、1つ目の引数と、2つ目の引数を、比較演算子(関係演算子)などを使って比較し、「0」「正の整数」「負の整数」のいづれかを返すようにしなければならない。

戻り値

論理値。

並べ替えに成功すると「TRUE」、失敗すると「FALSE」を返す。

構文

コールバック関数を使い、配列要素を、値でソート

論理値 = uasort( 配列, コールバック関数 );

「コールバック関数」に指定したユーザー定義関数を使い、「配列」の要素を、値で並べ替える。

サンプル

配列の要素を、値の昇順でソート(数値)

<pre>
<?php
function compare( $a, $b ) {
    if ( $a == $b ) {
        return 0;
    }
    return ( $a > $b ) ? 1 : -1;
}
$varArray = array( 2, 10, 7, 500, 70 );
uasort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [0] => 2
    [2] => 7
    [1] => 10
    [4] => 70
    [3] => 500
)

キーと値の相関関係は、維持したままである点に、注目。

配列の要素を、値の降順でソート(数値)

<pre>
<?php
function compare( $a, $b ) {
    if ( $a == $b ) {
        return 0;
    }
    return ( $a < $b ) ? 1 : -1;
}
$varArray = array( 2, 10, 7, 500, 70 );
uasort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [3] => 500
    [4] => 70
    [1] => 10
    [2] => 7
    [0] => 2
)

配列の要素を、値の昇順でソート(文字列)

<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 />";
uasort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
uasort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>

↓↓↓出力結果↓↓↓

大文字小文字を区別すると、
Array
(
    [3] => Blue
    [4] => Green
    [2] => Red
    [1] => black
    [0] => white
)
大文字小文字を区別しないと、
Array
(
    [1] => black
    [3] => Blue
    [4] => Green
    [2] => Red
    [0] => white
)

連想配列の要素を、値の昇順でソート(文字列)

<pre>
<?php
function compareA( $a, $b ) {
    return strcmp( $a, $b );
}
function compareB( $a, $b ) {
    return strcasecmp( $a, $b );
}
$varArray = array(
    "a" => "white",
    "b" => "black",
    "c" => "Red",
    "d" => "Blue",
    "e" => "Green"
);
echo "大文字小文字を区別すると、<br />";
uasort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
uasort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>

↓↓↓出力結果↓↓↓

大文字小文字を区別すると、
Array
(
    [d] => Blue
    [e] => Green
    [c] => Red
    [b] => black
    [a] => white
)
大文字小文字を区別しないと、
Array
(
    [b] => black
    [d] => Blue
    [e] => Green
    [c] => Red
    [a] => white
)

キーと値の相関関係は、維持したままである点に、注目。

コールバックにメソッドを使いソート

<?php
class mySort
{
    var $value;

    function __construct( $value ) {
        $this->value = $value;
    }

    static function compare( $a, $b ) {
        if ( $a == $b ) {
            return 0;
        }
        return ( $a > $b ) ? +1 : -1;
    }
}

$varArray = array( 500, 5, 2, 50, 10 );
foreach ( $varArray as $value ) {
    $varObj[] = new mySort( $value );
}

uasort( $varObj, array( "mySort", "compare" ) );

foreach ( $varObj as $item ) {
    echo $item->value . "<br />";
}
?>

↓↓↓出力結果↓↓↓

2
5
10
50
500

クラスやメソッドについては、オブジェクト指向プログラミングの、クラス、プロパティ、メソッドの、定義と呼び出しの基本へ。

スポンサード リンク

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