usort ユーザー定義の比較関数を使用して、配列を値でソートする &reftitle.description; boolusort arrayarray callablecmp_function この関数は、ユーザー定義の比較関数により配列をその値でソートします。 ソートしたい配列を複雑な基準でソートする必要がある場合、 この関数を使用するべきです。 比較結果が等しくなるメンバーが複数存在する場合、 ソート後の配列でのそれらのメンバーの並び順は未定義となります。 ¬e.no-key-association; &reftitle.parameters; array 入力の配列。 cmp_function &return.callbacksort; &callback.cmp; float のような非整数を比較関数が返すと、 その返り値を内部的に integer にキャストして使います。 つまり、0.99 や 0.1 といった値は整数値 0 にキャストされ、 値が等しいとみなされます。 &reftitle.returnvalues; &return.success; &reftitle.changelog; &Version; &Description; 4.1.0 新しいソートアルゴリズムが導入されました。 cmp_function は、 要素の比較結果が等しい場合にもとの並び順を維持しません。 &reftitle.examples; <function>usort</function> の例 $value) { echo "$key: $value\n"; } ?> ]]> &example.outputs; もちろん、このような簡単な例では rsort 関数の方がより適当です。 多次元配列を使用する <function>usort</function> の例 ]]> 多次元配列をソートする際には、$a$b は配列の最初のインデックスへの参照を保持しています。 &example.outputs; <function>usort</function> でオブジェクトのメンバ関数を使用する例 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"; } ?> ]]> &example.outputs; <function>usort</function> で <link linkend="functions.anonymous">クロージャ</link> を使って多次元配列をソートする例 '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"; } ?> ]]> &example.outputs; &reftitle.seealso; uasort &seealso.array.sorting;