関数・クラス解説

usort

version:PHP 4, PHP 5, PHP 7 (公式)

ユーザー定義の比較関数を使用して、配列を値でソートする

公式リファレンス

書式

usort ( array &$array , callable $value_compare_func ) : bool

callback ( mixed $a, mixed $b ) : int

説明

この関数は、ユーザー定義の比較関数により配列をその値でソートします。 ソートしたい配列を複雑な基準でソートする必要がある場合、 この関数を使用するべきです。

注意:

比較結果が等しくなる二つの要素があった場合、ソートした配列におけるそれらの並び順は不定となります。

注意: この関数は、array パラメータの要素に対して新しいキーを割り当てます。その際、単純にキーを並べ替える代わりに、すでに割り当てられている既存のキーを削除してしまいます。

パラメータ

array
入力の配列。
value_compare_func
比較関数は、最初の引数と二番目の引数の比較結果を返します。最初の引数のほうが二番目の引数より大きい場合は正の数を、二番目の引数と等しい場合はゼロを、そして二番目の引数より小さい場合は負の数を返す必要があります。
警告 float のような非整数を比較関数が返すと、 その返り値を内部的に int にキャストして使います。 つまり、0.99 や 0.1 といった値は整数値 0 にキャストされ、 値が等しいとみなされます。

返値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

サンプル

例1 usort() の例

function cmp($a, $b) {     if ($a == $b) {         return 0;     }     return ($a < $b) ? -1 : 1; } $a = array(3, 2, 5, 6, 1); usort($a, "cmp"); foreach ($a as $key => $value) {     echo "$key: $value\n"; }

上の例の出力は以下となります。

0: 1 1: 2 2: 3 3: 5 4: 6

注意:

もちろん、このような簡単な例では rsort() 関数の方がより適当です。

例2 多次元配列を使用する usort() の例

function cmp($a, $b) {     return strcmp($a["fruit"], $b["fruit"]); } $fruits[0]["fruit"] = "lemons"; $fruits[1]["fruit"] = "apples"; $fruits[2]["fruit"] = "grapes"; usort($fruits, "cmp"); while (list($key, $value) = each($fruits)) {     echo "\$fruits[$key]: " . $value["fruit"] . "\n"; }

多次元配列をソートする際には、$a と $b は配列の最初のインデックスへの参照を保持しています。

上の例の出力は以下となります。

$fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons

例3 usort() でオブジェクトのメンバ関数を使用する例

class TestObj {     var $name;     function TestObj($name)     {         $this->name = $name;     }     /* これは、比較用の静的関数です */     static function cmp_obj($a, $b)     {         $al = strtolower($a->name);         $bl = strtolower($b->name);         if ($al == $bl) {             return 0;         }         return ($al > $bl) ? +1 : -1;     } } $a[] = new TestObj("c"); $a[] = new TestObj("b"); $a[] = new TestObj("d"); usort($a, array("TestObj", "cmp_obj")); foreach ($a as $item) {     echo $item->name . "\n"; }

上の例の出力は以下となります。

b c d

例4 usort() で クロージャ を使って多次元配列をソートする例

$array[0] = array('key_a' => 'z', 'key_b' => 'c'); $array[1] = array('key_a' => 'x', 'key_b' => 'b'); $array[2] = array('key_a' => 'y', 'key_b' => 'a'); function build_sorter($key) {     return function ($a, $b) use ($key) {         return strnatcmp($a[$key], $b[$key]);     }; } usort($array, build_sorter('key_b')); foreach ($array as $item) {     echo $item['key_a'] . ', ' . $item['key_b'] . "\n"; }

上の例の出力は以下となります。

y, a x, b z, c

参考

  • uasort() - ユーザー定義の比較関数で配列をソートし、連想インデックスを保持する
  • 配列ソート関数の比較
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール