2016-12-26 40 views
-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(); 
} 
+0

你能告訴我你從哪裏得到這個 - 「」testeng「=> 0,」testeng1「=> 5' ...? –

+0

$ count_tag [$ tag-> name] = $ tag-> articles-> count(); – None

回答

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集合的方法來操作你的結果。

+0

只有一個問題...我可以放置限制,以便只顯示5條記錄,以便我只顯示5條記錄數最多的記錄? – None

+0

你可以在'get()'方法之前放置限制,像這樣 - ' - > limit(5) - > get()'。希望這可以幫助! –

+0

我試過了,但是當我這樣做的時候,訂單有了變化......我沒有得到最大數量的第一個記錄 – None

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列楷模。

+0

你不覺得,最好使用'ORM orderBy'而不是'arsort()' –

+0

我怎樣才能在我的例子中使用這個? – None

+0

只要在'foreach'後執行'arsort($ count_tag)',你的'$ count_tag'就會被更新。 –