Самый эффективный способ преобразовать двумерный массив повторяющихся имен, каждое с уникальным значением, в двумерный массив с уникальными именами с несколькими значениями в PHP? - PullRequest
0 голосов
/ 17 июня 2020

Каков наиболее эффективный способ преобразовать такой массив:

[ [ 'Quiz 1' , 89 ] , ['Quiz 2' , 78] , ['Quiz 1' , 56] , ['Quiz 1' , 25] , ['Quiz 2' , 87] , ['Quiz 3' , 91] ]

в этот:

[ [ 'Quiz 1' , 89, 56, 25] , ['Quiz 2' , 78, 87] , ['Quiz 3' , 91] ]

in PHP?

1 Ответ

5 голосов
/ 17 июня 2020

Итерация в 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);, чтобы вернуться к простому числовому индексу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...