3

アプリケーションで奇妙な警告通知が表示されます。クラス内でカスタムusort関数を使用しています。これはどのように見えるかです:

class Class_Name
{
    function zstream_builder()
    {
            $array = some_array();
        //sort posts by date DESC
        usort($array, array('Class_Name', 'zstream_sorter')); // <- the notice is thrown on this line

        return $array;
    }

    private static function zstream_sorter($key = 'sort_str_date')
    {
        return function ($a, $b) use ($key)
        {
            return strnatcmp($a[$key], $b[$key]);
        };
    }
}

これは私が受け取る通知です:

Notice: Object of class Closure could not be converted to int in PATH_TO_FILE on line xx

何か案は?

4

2 に答える 2

7

usortは比較関数Class_Name::stream_sorterとして呼び出し、2つの引数を渡します。戻り値は関数ですが、どちらの引数が大きいかを示す整数が必要です。関数自体ではなく、の戻り値をに渡す必要があります。usortClass_Name::stream_sorterusort

usort($array, self::zstream_sorter());
于 2012-12-01T12:44:53.697 に答える
1

比較関数は、関数ではなくintを返す必要があります。

並べ替えフィールドを選択する場合は、

protected $key = 'sort_str_date';

function zstream_builder()
{
  $array = some_array();
  //sort posts by date DESC
  usort($array, array($this, 'z_sorter')); 

  return $array;
}

function z_sorter($a, $b) 
{
   return strnatcmp($a[$this->key], $b[$this->key]);
}
于 2012-12-01T12:45:26.963 に答える