如何在数组中得到结果时按值排序?

时间:2016-12-26 14:08:33

标签: laravel laravel-5 laravel-5.2

我得到所有标签,它看起来像这样:

"testeng" => 0
"testeng1" => 5 

所以我想做的就是按价值排序,这样第一个就是价值5.任何建议我该怎么做?

$tags = ATags::with('articles')->whereHas('language',function($query) use($current_language_id){
  $query->where('id','=',$current_language_id);
})->get();
$count_tag = [];
foreach($tags as $tag){
  $count_tag[$tag->name] = $tag->articles->count();
}

2 个答案:

答案 0 :(得分:2)

您可以将arsort()用作:

 arsort($count_tag)
  

arsort - 按相反顺序对数组进行排序并维护索引关联

OR

您可以使用withCount直接在查询中对结果进行排序:

$tags = ATags::with('articles')
                ->whereHas('language',function($query) use($current_language_id){
                  $query->where('id','=',$current_language_id);
                })
                ->withCount('articles')
                ->orderBy('articles_count', 'desc')
                ->take(5)
                ->get();

来自文档

  

如果您想计算没有关系的结果数   实际上加载它们你可以使用withCount方法   在结果模型上放置{relation}_count列。

答案 1 :(得分:1)

您可以使用收藏集sortBysortByDesc& count方法对结果进行排序,如下所示:

$tags = ATags::with('articles')->whereHas('language',function($query) use($current_language_id) {
  $query->where('id','=',$current_language_id);
})
->get()
->sortByDesc(function($tag) {  // <---- sorting it via article's count
    return $tag->articles->count();
})
->take(5); // <----- fetch largest 5 from collection
  

您可以将闭包方法传递给sortBysortByDesc集合的方法来操纵您的结果。