2009-08-04 9 views
4

私は、次のしているデータの並べ替えの私は、「標識」または「体重を使用して配列をソートしたいPHP「警告:usort()[function.usort]:無効な比較関数」連想配列として

array 
    'abc' => 
    array 
     'label' => string 'abc' (length=3) 
     'weight' => float 3 
    'wsx' => 
    array 
     'label' => string 'wsx' (length=3) 
     'weight' => float 1 
    'qay' => 
    array 
     'label' => string 'qay' (length=3) 
     'weight' => float 1 
    'http://test.com' => 
    array 
     'label' => string 'http://test.com' (length=15) 
     'weight' => float 0 
    'Nasi1' => 
    array 
     'label' => string 'Nasi1' (length=5) 
     'weight' => float 0 
    'fax' => 
    array 
     'label' => string 'fax' (length=3) 
     'weight' => float 4 

ラベルのための機能を比較するには、次のとおりです。

function compare_label($a, $b) 
{ 
    return strnatcmp($a['label'], $b['label']); 
} 

と私はちょうど別の関数から関数を呼び出すより:

usort($label, 'compare_label'); 
var_dump($label); 

しかし、エラーメッセージが表示され、配列はソートされません。私は、私が間違っていることは分かりません。

  • usort($label, 'compare_label');usort($label, compare_label);
  • usort($label, 'compare_label');usort($label, $this->compare_label);

で成功せず:私は交換することを試みました。誰かが私にヒントを与えることができますか?

答えて

21

compare_labelがメンバー関数(つまり、クラスメソッド)の場合は、別の方法で渡す必要があります。

usort($label, array($this, 'compare_label')); 

基本的にだけではなく関数名の文字列を送信する、最初の要素は、コンテキスト(メソッドが見つかる可能なオブジェクト)、及び第2の要素である2要素アレイを、送信関数名の文字列です。

注:あなたのメソッドが静的である場合は、

usort($label, array(__CLASS__, 'compare_label')); 
+0

はい、メンバ関数である、それは方法だ場合、あなたは少しそれを呼び出す方法を変更する必要があります....それは動作します! :) – cupakob

1

は、比較関数は、グローバル関数として、またはオブジェクトのメソッドとして定義されている配列の最初の要素として、クラス名を渡します?

usort($label, array($object, "compare_label")); 

あなたは、クラス自体の静的メソッドとしてそれを宣言することができます:

public static function compare_label ($a, $b) { 
    [...] 
} 

usort($label, array(Class_Name, "compare_label"));