|
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7">usort (PHP 3>= 3.0.3, PHP 4 ) usort --
ユーザー定義の比較関数により値で配列をソートします
説明void usort ( array array, string cmp_function)
この関数は、ユーザー定義の比較関数により配列をその値でソートします。
ソートしたい配列を複雑な基準でソートする必要がある場合、
この関数を使用するべきです。
比較関数は、最初の引数が2番目の引数より小さいか、等しいか、大きい
場合に、それぞれゼロ未満、ゼロに等しい、ゼロより大きい整数を返す
必要があります。2つのメンバーの比較結果が等しいとなった場合、
ソートされた配列の順番は定義されません。
比較関数としてあるオブジェクトのメンバー関数を使用することも可能です。
以下の例3を参照下さい。
例 1usort()の例 function cmp ($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array (3, 2, 5, 6, 1);
usort ($a, "cmp");
while (list ($key, $value) = each ($a)) {
echo "$key: $value\n";
} |
|
この例は以下を表示します:
注意
もちろん、このような簡単な例では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 は配列の最初のインデックス
への参照を保持していまY。
この例の出力は以下となります。
例 3
usort()でオブジェクトのメンバ関数を使用する例
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* 静的な比較関数: */
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");
uasort($a, array ("TestObj", "cmp_obj"));
foreach ($a as $item) {
print $item->name."\n";
} |
|
この例の出力は以下のようになります。
警告 |
(Solarisシステムのような)いくつかのCライブラリに含まれる
quicksort関数は、比較関数が適当な値を返さない場合にPHPをクラッ
シュさせる可能性があります。
|
uasort(), uksort(),
sort(), asort(),
arsort(), ksort(),
natsort(), rsort()
も参照下さい。
|