首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合排序数组

集合排序数组
EN

Stack Overflow用户
提问于 2017-11-21 22:59:15
回答 2查看 66关注 0票数 0

我有一个存储3个合并集合的数组:

代码语言:javascript
复制
public function answer() {
        $interview = Interview::find(1);

        $videoQuestions = $interview->VideoQuestions()->get();
        foreach ($videoQuestions as $vq) {
            $vq->type = 'video';
        }

        $textQuestions = $interview->TextQuestions()->get();
        foreach ($textQuestions as $tq) {
            $tq->type = 'text';
        }

        $uploadQuestions = $interview->UploadQuestions()->get();
        foreach ($uploadQuestions as $uq) {
            $uq->type = 'upload';
        }

        $questions = collect($videoQuestions);
        $questions = $questions->merge($textQuestions);
        $questions = $questions->merge($uploadQuestions);

        $questions->sortBy('order_position');
        dd($questions);
    }

->sortBy不工作,因为我假设它不工作在一个集合数组上。

这就是我所拥有的:

但我真的希望它是一个合并的集合,而不是集合中的数组。

每个VideoQuestionTextQuestion都有一个order_position字段,我想对其进行排序。

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-21 23:07:06

第一件事是包含一个元素数组的类,该数组具有筛选排序、docs的特殊方法:

照明\Support\Collection类为处理数据数组提供了一个流畅、方便的包装器。

sortBy方法返回一个排序集合(它不适用于它所拥有的项):

代码语言:javascript
复制
$collection = collect([
    ['name' => 'Desk', 'price' => 200],
    ['name' => 'Chair', 'price' => 100],
    ['name' => 'Bookcase', 'price' => 150],
]);

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

$sorted->values()->all();

/*
    [
        ['name' => 'Chair', 'price' => 100],
        ['name' => 'Bookcase', 'price' => 150],
        ['name' => 'Desk', 'price' => 200],
    ]
*/

所以你应该有这样的东西:

代码语言:javascript
复制
$questions = $questions->sortBy('order_position');
dd($questions);
票数 2
EN

Stack Overflow用户

发布于 2017-11-21 23:15:37

这可能是另一种选择:

代码语言:javascript
复制
$interview = Interview::find(1)->with(['VideoQuestions',
                                       'TextQuestions', 
                                       'UploadQuestions', 
                                       'Questions' => function($query){
                                           $query->orderBy('order_position', 'asc');
                                       }])->get();

定义关系,并生成一个包含order_position的表问题,您可以对其进行排序,而不是每个表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47424142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档