2011-12-10 3 views
2

私はuasort()関数を使って配列をソートしたいと思います。私は、コードのこの部分を書き、それがうまく働いた:Zend Action Helper(またはクラス内)でuasort()を使用するには?

function cmp($a, $b) 
    { 
     $_a = strlen($a); 
     $_b = strlen($b); 
     if($_a==$_b) 
     { 
      return 0; 
     } 

     return ($_a < $_b)? -1 : +1; 
    } 

    $arr = array(
      "234560"=>"the quick brown fox jump", 
      "234561"=>"the quick brown fox jump over the lazy dog", 
      "234562"=>"the quick brown" 
     ); 

    $array = uasort($arr,"cmp"); 

しかし、私はクラスにそれを置くとき、それは警告でnullを返します。ここでは

Warning: uasort() expects parameter 2 to be a valid callback, function 'cmp' not found or invalid function name in... 

は私のコードは

class Zend_Controller_Action_Helper_Utility extends Zend_Controller_Action_Helper_Abstract 
{ 

    public function uasort($array) 
    { 
     return uasort($array, "cmp"); 
    } 

    function cmp($a, $b) 
    { 
     $_a = strlen($a); 
     $_b = strlen($b); 
     if ($_a == $_b) 
     { 
      return 0; 
     } 

     return ($_a < $_b) ? -1 : +1; 
    } 

} 
です

私はまたしてみてください

return uasort($array, "Zend_Controller_Action_Helper_Utility::cmp"); 

static function cmp(){}と一緒ですが、まだnullが返されます。

どうすれば修正できますか?

答えて

4

コールバックを間違って指定しています。それはインスタンスメソッドである場合は、

array($this, 'cmp'); 

として指定する必要がありますあなたはそれ静的メソッドにする場合は、

array('Zend_Controller_Action_Helper_Utility', 'cmp'); 

として指定する必要があります詳細はdocumentation of callbackを参照してください。

+0

私は期待どおりに動作しません、真(var_dump)真を返します。 @Jon – hungneox

+0

@eureka:['uasort'](http://php.net/manual/en/function.uasort.php)は、配列を返さず、インプレースでソートします。ドキュメントをお読みください。 – Jon

+0

ありがとうございました@ジョン、私の問題は解決しました – hungneox

関連する問題