使用usort进行对象排序

时间:2013-02-25 16:41:02

标签: php

我正在尝试使用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.我做错了吗?

由于

2 个答案:

答案 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"));