我有一个收藏集
$questions = ExaminationQuestion::where('question_set_id', $set->id)
->where('marks', array_flip($marks)['2 Marks'])
->inRandomOrder()
->get();
它具有科目能力,化学,数学,英语,物理,分别存储为0、1、2、3、4。
[
{
id: 1,
question_set_id: 1,
subject: 0,
},
{
id: 2,
question_set_id: 1,
subject: 0,
},
{
id: 1,
question_set_id: 1,
subject: 1,
},
{
id: 2,
question_set_id: 1,
subject: 1,
},
{
id: 1,
question_set_id: 1,
subject: 2,
},
{
id: 2,
question_set_id: 1,
subject: 2,
},
{
id: 1,
question_set_id: 1,
subject: 3,
},
{
id: 2,
question_set_id: 1,
subject: 3,
},
{
id: 2,
question_set_id: 1,
subject: 4,
},
{
id: 2,
question_set_id: 1,
subject: 4,
},
]
我想以随机顺序显示$ questions,而不是对每个问题进行改组,而是对主题进行改组。就像以随机顺序显示所有数学问题,然后以随机顺序显示物理问题一样,依此类推。主题可以按任意顺序拖移,但问题不应拖拉,例如首先显示一个能力问题,然后显示另一个英语问题,依此类推。 应该按照这样或以任何顺序显示,但要取决于主题。
[
{
id: 1,
question_set_id: 1,
subject: 3,
},
{
id: 2,
question_set_id: 1,
subject: 3,
},
{
id: 1,
question_set_id: 1,
subject: 2,
},
{
id: 2,
question_set_id: 1,
subject: 2,
},
{
id: 1,
question_set_id: 1,
subject: 0,
},
{
id: 2,
question_set_id: 1,
subject: 0,
},
{
id: 1,
question_set_id: 1,
subject: 4,
},
{
id: 2,
question_set_id: 1,
subject: 4,
},
{
id: 2,
question_set_id: 1,
subject: 1,
},
{
id: 2,
question_set_id: 1,
subject: 1,
},
]
答案 0 :(得分:1)
Laravel的集合允许您使用一些辅助方法来做到这一点:
$questions->groupBy('subject')->shuffle()->flatten(1);
groupBy('subject')
将为您提供类似于以下内容的2d集合:
[
subject id => [question, question, ...],
subject id => [question, question, ...],
..
]
shuffle()
将改组上述集合。
flatten(1)
将删除分组级别,为您提供按随机主题分组的扁平问题列表。参数1
的意思是“仅展平一个级别”;如果您忽略将得到奇怪的结果。