1

usort を使用してオブジェクト配列を距離でソートしようとしています。これが私のソート機能です:

private function sortDistance ($first, $next)
{
    $d1 = $this->searchDistance[$first->zip];
    $d2 = $this->searchDistance[$next->zip];

    if ($d1 == $d2) {
        return 0;
    }
    return ($d1 > $d2) ? +1 : -1;
}

ここで私は usort を呼んでいます:

return usort($searchResults->limit('5', $start)->get()->result(), array("Search", "sortDistance"));

何らかの理由で、返された結果を print_r すると、1 しか出力されません。何か間違っていますか?

ありがとう

4

2 に答える 2

1

usort 関数はドキュメントを完成させているため、usort を返すと 1 が返されます。ソートしたばかりの配列を print_r() すると、ソートされた値が表示されます:)

作業例:

$result = $searchResults->limit('5', $start)->get()->result();
usort($result, array("Search", "sortDistance"));
return $result;
于 2013-02-25T16:43:42.403 に答える
0

並べ替え関数を静的にします。

 private static function sortDistance ($first, $next){ ...

また、これはプライベートであるため、メソッドが定義されている Search クラス内での並べ替えに対してのみ機能します。子クラスで使用するには保護し、どこでも使用するには公開します。

別の方法として、非静的メソッドを作成したい場合で、Search オブジェクトのインスタンス内にいる場合は、メソッドを非静的にして、次のように呼び出すことができます。

  return usort($searchResults->limit('5', $start)->get()->result(), 
                array($this,   "sortDistance"));
于 2013-02-25T16:45:36.900 に答える