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

私は最善の解決策は、最初のグループに2つのコレクションにデータかもしれないと思う記事を混合します。

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

これは、あなたがそうのようにアクセスできる2つのキーであなたのコレクションを提供します:

$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

私は解決策を追加しました。申し訳ありませんが、それはずっとかかりましたが、私はそれをやるのにいい方法を見つけようとしていました。何か問題がある場合は私に教えてください、私はテストしていないが、私はこれが動作すると思います。 –

関連する問題