2017-01-23 49 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

我已经添加了一个解决方案,对不起花了这么长时间,但我试图找到一个很好的方式做到这一点,我在工作。让我知道是否有任何问题,我没有测试,但我认为这应该工作。 –