4

私は連想配列として次のデータを持っています

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);

成功せずに。誰かが私にヒントを与えることができますか?

4

2 に答える 2

21

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

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

基本的に、関数名の文字列を送信するだけでなく、2要素の配列を送信します。最初の要素はコンテキスト(メソッドを見つけることができるオブジェクト)であり、2番目の要素は関数名の文字列です。 。

注:メソッドが静的である場合は、配列の最初の要素としてクラス名を渡します

usort( $label, array( __CLASS__, 'compare_label' ) );
于 2009-08-04T19:15:24.773 に答える
1

比較関数はグローバル関数として定義されていますか、それともオブジェクトのメソッドとして定義されていますか?メソッドの場合は、呼び出し方法を少し変更する必要があります。

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

クラス自体の静的メソッドとして宣言することもできます。

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

usort($label, array(Class_Name, "compare_label"));
于 2009-08-04T19:17:14.863 に答える