Php Shuffle在laravel中保留相似元素
我有一个收藏Php Shuffle在laravel中保留相似元素,php,laravel,Php,Laravel,我有一个收藏 $questions = ExaminationQuestion::where('question_set_id', $set->id) ->where('marks', array_flip($marks)['2 Marks']) ->inRandomOrder() ->g
$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,
},
]
Laravel的集合允许您使用一些辅助方法来实现这一点:
$questions->groupBy('subject')->shuffle()->flatten(1);
groupBy('subject')
将为您提供类似以下内容的2d集合:
[
subject id => [question, question, ...],
subject id => [question, question, ...],
..
]
shuffle()
将洗牌上述集合
flatte(1)
将删除分组级别,为您提供一个按混合主题分组的问题的平面列表。参数1
表示“仅展平一层”;如果您忽略了这一点,您将得到更为详细的结果。显示您的表结构或数据响应,以及您如何存储数据。非常感谢您的回答。我已经尝试过groupBy,但它是在一个小组中显示的。我确实知道平坦的地方。这么大的问题。如果有帮助的话,你能通过点击答案左边的灰色勾号将我的答案标记为正确吗?完成。你能把这个问题投上一票让其他人知道吗。