usort
    (PHP 3 >= 3.0.3, PHP 4, PHP 5)
usort -- 
   ユーザー定義の比較関数を使用して、配列を値でソートする
  
説明
bool 
usort ( array &array, callback cmp_function )
   この関数は、ユーザー定義の比較関数により配列をその値でソートします。
   ソートしたい配列を複雑な基準でソートする必要がある場合、
   この関数を使用するべきです。
  
   比較関数は、最初の引数が 2 番目の引数より小さいか、等しいか、大きい場合に、
   それぞれゼロ未満、ゼロに等しい、ゼロより大きい整数を返す
   必要があります。
  
   
注意: 
     二つのメンバーの比較結果が等しいとなった場合、
     ソートされた配列の順番は定義されません。PHP 4.0.6 までは、
     ユーザー定義関数はそれらの要素の順番を維持します。しかし
     PHP 4.1.0 以降で導入された新しいソートアルゴリズムでは、
     それと同等のことを行う効果的な方法はありません。
    
注意: この関数は、
array パラメータの要素に対して新しいキーを割り当てます。
その際、単純にキーを並べ替える代わりに、
すでに割り当てられている既存のキーを削除してしまいます。
   成功した場合に TRUE を、失敗した場合に FALSE を返します。
  
   
| 例 1. usort() の例 | 
<?phpfunction 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";
 }
 ?>
 | 
 上の例の出力は以下となります。 | 
  注意: 
    もちろん、このような簡単な例では rsort()
    関数の方がより適当です。
   
   
| 例 2. 多次元配列を使用する usort() の例 | 
<?phpfunction 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() でオブジェクトのメンバ関数を使用する例
     | 
<?phpclass TestObj {
 var $name;
 
 function TestObj($name)
 {
 $this->name = $name;
 }
 
 /* This is the static comparing function: */
 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";
 }
 ?>
 | 
 上の例の出力は以下となります。 | 
  
   uasort()、
   uksort()、sort()、
   asort()、
   arsort()、ksort()、
   natsort() および rsort()
   も参照ください。