簡體   English   中英

Laravel,如何對循環數組進行排序和分頁

[英]Laravel, how to sort and paginate of loop array

我在控制器中有此代碼,所以我需要使用距離進行分頁和排序,我不知道該怎么做。

$stores = [];
foreach (session('storeinfo') as $storeInfo) {
$store = Storeinfo::find($storeInfo['id']);
if ($store) {
    $store->distance = $storeInfo['distance'];
    $stores[] = $store;

 $stores = collect([]);

 if (!Collection::hasMacro('paginate')) {
Collection::macro('paginate', function ($perPage = 25, $page = null, $options = []) {
    $options['path'] = $options['path'] ?? request()->path();
    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
    return new LengthAwarePaginator(
        $this->forPage($page, $perPage)->values(),
        $this->count(),
        $perPage,
        $page,
        $options
    );
    });   
   }
  }
 }

return view('stores.archive',compact('stores'));

我使用以下方法將ID放入會話中:

 $allstores= Storeinfo::all();
foreach ($allstores as $allstore) {
Session::push('storeinfo', [
'id' => $allstore->id,
'distance' => $miles
]);  

}}

$ mile來自距離的計算,請在此處輸入代碼

首先,我將創建您的$stores數組的集合實例:

$stores = collect([]);

我更喜歡使用集合的push() API添加項目:

$stores->push($store);

其次,集合實例未提供本機分頁的方式,因此您需要添加一個宏:

use Illuminate\Support\Collection;
use Illuminate\Pagination\Paginator; 
use Illuminate\Pagination\LengthAwarePaginator;

...

if (!Collection::hasMacro('paginate')) {
    Collection::macro('paginate', function ($perPage = 25, $page = null, $options = []) {
        $options['path'] = $options['path'] ?? request()->path();
        $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
        return new LengthAwarePaginator(
            $this->forPage($page, $perPage)->values(),
            $this->count(),
            $perPage,
            $page,
            $options
        );
    });
}

我親自在AppServiceProvider添加了上面的宏,以便可以在項目中的任何地方使用它。 它應該位於app/Providers目錄中。

要進行分頁,只需要調用剛創建的paginate()宏即可:

$stores->paginate(15);

如果您希望設置當前頁面或路徑,可以這樣做:

$stores->paginate(15, 1, ['path' => 'your/custom/path']);

要進行排序,只需使用所需的sortBy方法即可實現結果。

根據文檔, sortBy采用一個字符串:

$sorted = $collection->sortBy('price');

或回調:

$sorted = $collection->sortBy(function ($product, $key) {
    return count($product['colors']);
});

該方法, sortByDesc()的工作方式相同sortBy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM