2017-01-23 47 views
0

我有一個很長的數組,分頁! 我爲用戶做了「高級」。現在我想按保費排列數組。 我的數組:數組排序,不是簡單的排序

array:8 [▼ 
    0 => array:34 [▼ 
    "id" => 10 
    "id_user" => "2" 
    "vehicletype" => "car" 
    "make" => "AMC" 
    "model" => "Encore" 
    "age" => "2017-01-14" 
    "body" => "4" 
    "price" => "94650" 
    "vrt_price" => "102850" 
    "vrt_date" => "2017-01-14" 
    "condition" => "2" 
    "mileage" => "12" 
    "booth_space" => "1" 
    "doors" => "1" 
    "seat" => "14" 
    "eng_size" => "1" 
    "eng_hp" => "0.75" 
    "eng_kw" => "1" 
    "fuel" => "LPG" 
    "trans" => "Semi-Au" 
    "desc" => "133333333333333333333333333333333333333333333333333333333133333333333333333333333333333333333333333333333333333333" 
    "extras" => "2" 
    "created_at" => "2017-01-14 14:13:00" 
    "finish_at" => "2017-02-14 14:13:00" 
    "updated_at" => null 
    "premium_g1" => null 
    "g1_start_at" => null 
    "g1_finish_at" => null 
    "premium_g2" => null 
    "g2_start_at" => null 
    "g2_finish_at" => null 
    "extras_title" => array:1 [▶] 
    "user_name" => "Szabolcs996" 
    "images" => array:1 [▶] 
    ] 
    1 => array:34 [▶] 
    2 => array:34 [▶] 
    3 => array:34 [▶] 
    4 => array:34 [▶] 
    5 => array:34 [▶] 
    6 => array:34 [▼ 
    "id" => 5 
    "id_user" => "2" 
    "vehicletype" => "car" 
    "make" => "Aston Martin" 
    "model" => "Rapide" 
    "age" => "2017-01-14" 
    "body" => "5" 
    "price" => "4800" 
    "vrt_price" => "1550" 
    "vrt_date" => "2017-01-14" 
    "condition" => "2" 
    "mileage" => "450" 
    "booth_space" => "1550" 
    "doors" => "15" 
    "seat" => "4" 
    "eng_size" => "5" 
    "eng_hp" => "79.5" 
    "eng_kw" => "106" 
    "fuel" => "LPG" 
    "trans" => "Automatic" 
    "desc" => "1234567891111111111111111111111111111111111111111111111111111115asssssssssssssssssssssss" 
    "extras" => "2,4,7,8" 
    "created_at" => "2017-01-14 12:43:19" 
    "finish_at" => "2017-02-14 12:43:19" 
    "updated_at" => "2017-01-22 17:04:08" 
    "premium_g1" => "123" 
    "g1_start_at" => "2017-01-23 09:45:58" 
    "g1_finish_at" => "2017-02-04 09:45:58" 
    "premium_g2" => "22" 
    "g2_start_at" => "2017-01-23 09:45:58" 
    "g2_finish_at" => "2017-02-22 09:45:58" 
    "extras_title" => array:4 [▶] 
    "user_name" => "Szabolcs996" 
    "images" => array:12 [▶] 
    ] 
    7 => array:34 [▶] 
] 

所以,這條具有premium_g2價值! 我不想用MYSQL排序的重要事情!

我在每頁上都有8篇文章。 我想混合的文章,就像在每一頁每秒/三篇文章是溢價。

謝謝!

回答

1

您可以使用laravel集合。

collect($array)->sortBy('premium_g2'); 

您也可以反向的結果。

collect($array)->sortByDesc('premium_g2'); 

collect($array)->sort('premium_g2')->reverse(); 

https://laravel.com/docs/5.3/collections#method-sortby

爲混合文章中,我認爲最好的解決辦法可能是第一組數據分成兩個集合。

$collection = collect($array); 
$total = $collection->count(); 
$sorted = $collection->groupBy(function ($item, $key) { 
    return $item['premium_g2'] === null ? 'standard' : 'premium'; 
} 

這會給你,你可以訪問像這樣兩個鍵集合:

$sorted->premium 
$sorted->standard 

然後你可以使用$total計數遍歷並選擇要顯示的文章。您可以使用shift()方法從每個集合中提取第一個項目,以便在下一個循環中選擇下一個項目。

@for ($i = 0; $i < $total; $i++) 
    @if ($i % 3 === 0) 
     {{ $sorted->premium->shift()['make'] }} 
    @else 
     {{ $sorted->standard->shift()['make'] }} 
    @endif 
@endfor 
+0

對不起,剛纔讀了其餘的問題。現在編輯。 –

+0

謝謝。這很有幫助。我忘了檢查Laravel文檔..但要混合? :) – Gari

+1

我已經添加了一個解決方案,對不起花了這麼長時間,但我試圖找到一個很好的方式做到這一點,我在工作。讓我知道是否有任何問題,我沒有測試,但我認爲這應該工作。 –