首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在输出前重新组织帖子

如何在输出前重新组织帖子
EN

Stack Overflow用户
提问于 2018-06-04 04:10:55
回答 1查看 51关注 0票数 3

我有一篇文章的申请。正常情况下,我没有任何推荐系统,除了从数据库中获得最新的100个数据,并根据喜欢计数来推荐它们。我想知道如何将数据放入数组中,然后在输出之前做一些数学运算。我有一个想法,但在互联网上找不到任何有用的东西。

假设我有这样的查询:

代码语言:javascript
复制
$articles = Article::orderBy('id', 'desc')->take(100)->get();

现在我要做的是创建另一个大小为100array,并根据我的算法逐个放置每篇文章的id。

在我开始之前,我想给你将要用到的所有东西:

代码语言:javascript
复制
$article->likecount 
$article->viewcount 
$article->user->reputation  
$article->category->interest  

我将使用这些值对最近100篇文章进行重新排序,然后对它们进行paginate

这是我需要的:

I need to get $user->reputation

  • Add $category->interest

  • Result $article->viewcount
  • $article->likecount
  • Add the $category->interest
  • Result$user->reputation
  • Add$article->viewcount

(我需要添加减去$user->reputation

  • Add$category->interest

  • Result$article->likecount

  • )

然后将该值放入数组中。数组需要从最小到最大的进行排序。

我可以在CC++中做一些类似的事情,但我不知道足够的语法来在原始的PHPLaravel中实现这一点

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 08:59:30

每个令人信服的结果都是一个集合,其中包含一系列有用的方法。在这种情况下,您可以使用带有回调函数的sortBy

代码语言:javascript
复制
$articles = Article::orderBy('id', 'desc')
                     ->with(['user', 'category']) // add with to optimize your query relations
                     ->take(100)->get();


$sorted = $articles->sortBy(function($article) {
    return $article->likecount + $article->user->reputation + $article->category->interest - $article->viewcount;
});

// and here is sorted array with 100 articles.
$articles_sorted = $sorted->values()->all();

如果您想要按desc排序,请使用sortByDesc()方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50670550

复制
相关文章

相似问题

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