首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用usort进行对象排序

使用usort进行对象排序
EN

Stack Overflow用户
提问于 2013-02-26 00:41:02
回答 2查看 129关注 0票数 1

我正在尝试使用usort按距离对对象数组进行排序。下面是我的排序函数:

代码语言:javascript
复制
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的地方:

代码语言:javascript
复制
return usort($searchResults->limit('5', $start)->get()->result(), array("Search", "sortDistance"));

由于某种原因,当我print_r返回结果时,它只打印1。我做错了什么吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-02-26 00:43:42

返回usort是返回1,因为usort函数已经完成了documentation。print_r()您刚刚排序的数组,您将看到排序后的值:)

工作示例:

代码语言:javascript
复制
$result = $searchResults->limit('5', $start)->get()->result();
usort($result, array("Search", "sortDistance"));
return $result;
票数 1
EN

Stack Overflow用户

发布于 2013-02-26 00:45:37

让你的排序函数成为静态的:

代码语言:javascript
复制
 private static function sortDistance ($first, $next){ ...

此外,这只适用于在定义方法的Search类中进行排序,因为它是私有的。要在子类中使用它,请将其设置为受保护,以便在任何地方使用时都将其设置为公共。

或者,如果你想以非静态方式处理它,并且你在一个搜索对象的实例中,你可以将该方法设为非静态的,并像这样调用它:

代码语言:javascript
复制
  return usort($searchResults->limit('5', $start)->get()->result(), 
                array($this,   "sortDistance"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15071852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档