用另一个数组对laravel集合进行排序

问题描述 投票:0回答:1

我想按id排序集合,其中id存储在自定义数组中。

我正在做这样的事情:

// get the slides images
$allSlides = DB::table('homepage_slides')->paginate(10);
// slideOrderSetting is a json, storing the order for slides [{"id":4},{"id":1},{"id":2},{"id":3},{"id":5},{"id":6}]
$slideOrder = json_decode($slideOrderSetting, true); 

// sort the slides
$slides = array();
foreach ($slideOrder as $order){
    foreach ($allSlides as $slide){
        if((int)$order['id'] === (int)$slide->SlideID){
            array_push($slides, $slide);
            break;
        }
    }
}

// get the slide array sorted
return $slides;

数组幻灯片排序,但....问题是我从$ allSlides集合中松散了分页和其他内容。

如何使用id为自定义数组对幻灯片集合进行排序?

php laravel laravel-5.5
1个回答
1
投票

$slideOrderSetting获取所有ID:

$slideOrderArray = json_decode($slideOrderSetting, true);
$slideOrderIDs = collect($slideOrderArray)->pluck('id')->toArray()

About pluck()方法

然后得到幻灯片:

$slides = DB::table('homepage_slides')
    ->orderByRaw(DB::raw('FIELD(id, '.implode(', ', $slideOrderIDs).')'))
    ->paginate(10)

要么

$slides = DB::table('homepage_slides')
    ->whereIn('id', $slideOrderIDs)
    ->orderByRaw(DB::raw('FIELD(id, '.implode(', ', $slideOrderIDs).')'))
    ->paginate(10)
© www.soinside.com 2019 - 2024. All rights reserved.