Итерация в foreach l oop - это самый эффективный способ сделать это, если вы имеете в виду наиболее эффективный. Возможно, это не самый элегантный способ. Вы также можете использовать array_map
или другое подобное; для каждого свои предпочтения. В любом случае, используя номер викторины в качестве ключа группировки. Вот для простых:
$vars = [ [ 'Quiz 1' , 89 ] , ['Quiz 2' , 78] , ['Quiz 1' , 56] , ['Quiz 1' , 25] , ['Quiz 2' , 87] , ['Quiz 3' , 91] ];
$grouped = [];
foreach($vars as $var) {
empty($grouped[$var[0]]) && $grouped[$var[0]] = [$var[0]]; // If Quiz # must go in.
$grouped[$var[0]][] = $var[1];
}
Вывод:
Array [
[Quiz 1] => [
[0] => Quiz 1
[1] => 89
[2] => 56
[3] => 25
]
[Quiz 2] => [
[0] => Quiz 2
[1] => 78
[2] => 87
]
[Quiz 3] => [
[0] => Quiz 3
[1] => 91
]
]
Вы заметите, что значения сгруппированы с помощью Quiz # в качестве ключа. (Обязательно.) Сделайте первую запись в массиве избыточной. Если вам не нужен номер викторины в массиве, закомментируйте первую строку l oop. Если он вам нужен и вам не нравятся числа викторины, используемые в качестве ключей, завершите sh с помощью $grouped = array_values($grouped);
, чтобы вернуться к простому числовому индексу.