我正在尝试使用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;
}
这是我打电话给我们的地方:
return usort($searchResults->limit('5', $start)->get()->result(), array("Search", "sortDistance"));
出于某种原因,当我print_r返回结果时,它只打印1.我做错了吗?
由于
答案 0 :(得分:1)
返回usort返回1,因为usort函数已完成documentation。 print_r()您刚刚排序的数组,您将看到排序值:)
工作示例:
$result = $searchResults->limit('5', $start)->get()->result();
usort($result, array("Search", "sortDistance"));
return $result;
答案 1 :(得分:0)
使您的排序功能静止:
private static function sortDistance ($first, $next){ ...
此外,这仅适用于在定义方法的Search类内部进行排序,因为它是私有的。要在子类中使用它,使其受到保护,以便在任何地方公开使用。
或者,如果你想将它设置为非静态的并且你在Search对象的实例中,你可以使该方法非静态并像这样调用它:
return usort($searchResults->limit('5', $start)->get()->result(),
array($this, "sortDistance"));