我正在尝试使用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。我做错了什么吗?
谢谢
发布于 2013-02-26 00:43:42
返回usort是返回1,因为usort函数已经完成了documentation。print_r()您刚刚排序的数组,您将看到排序后的值:)
工作示例:
$result = $searchResults->limit('5', $start)->get()->result();
usort($result, array("Search", "sortDistance"));
return $result;发布于 2013-02-26 00:45:37
让你的排序函数成为静态的:
private static function sortDistance ($first, $next){ ...此外,这只适用于在定义方法的Search类中进行排序,因为它是私有的。要在子类中使用它,请将其设置为受保护,以便在任何地方使用时都将其设置为公共。
或者,如果你想以非静态方式处理它,并且你在一个搜索对象的实例中,你可以将该方法设为非静态的,并像这样调用它:
return usort($searchResults->limit('5', $start)->get()->result(),
array($this, "sortDistance"));https://stackoverflow.com/questions/15071852
复制相似问题