Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Shuffle在laravel中保留相似元素_Php_Laravel - Fatal编程技术网

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,但它是在一个小组中显示的。我确实知道平坦的地方。这么大的问题。如果有帮助的话,你能通过点击答案左边的灰色勾号将我的答案标记为正确吗?完成。你能把这个问题投上一票让其他人知道吗。