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;
usort の例
$value) {
echo "$key: $value\n";
}
?>
]]>
&example.outputs;
もちろん、このような簡単な例では rsort
関数の方がより適当です。
多次元配列を使用する usort の例
]]>
多次元配列をソートする際には、$a と $b
は配列の最初のインデックスへの参照を保持しています。
&example.outputs;
usort でオブジェクトのメンバ関数を使用する例
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;
usort で クロージャ
を使って多次元配列をソートする例
'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;