为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel,如何对循环数组进行排序和分页

Laravel,如何对循环数组进行排序和分页

PHP
吃鸡游戏 2021-11-05 13:21:41
我在控制器中有这段代码,所以我需要使用距离进行分页和排序,我不知道该怎么做,我是 laravel 的新手,提前致谢$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 来自计算距离的地方在此处输入代码
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

首先,我会创建一个$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().


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 279 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信