PHP. Как сгруппировать значения по тегам в многомерном массиве? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть двумерный массив, который содержит теги людей имя и языки . Цель состоит в том, чтобы сгруппировать все имена по языкам тегам

Вот пример такого массива:

[
 ['name' => 'Ann', 'languages' => ['EN', 'FR']],
 ['name' => 'Bill', 'languages' => ['ES', 'CN']],
 ['name' => 'Jake', 'languages' => ['ES', 'FR']],
]

Он должен быть преобразован в:

[
 'EN' => ['Ann'],
 'FR' => ['Ann', 'Jake'],
 'ES' => ['Bill', 'Jake'],
 'CN' => ['Bill']
]

Вот мой код, сгруппированный по языкам. Первая проблема в том, что он добавляет id ключей. Во-вторых, я не уверен, есть ли какие-либо функции массива в php, которые лучше использовать.

function groupByLang(array $array) {
    $result = [];
    foreach ($array as $person) {
        foreach ($person['languages'] as $lang) {
            $result[$lang][] = $person['name'];
        }
    }
    return $result;
}

Вот результат

[
 'EN' => [0 => 'Ann'],
 'FR' => [0 => 'Ann', 1 => 'Jake'],
 'ES' => [0 => 'Bill', 1 => 'Jake'],
 'CN' => [0 => 'Bill']
]

Может ли кто-нибудь помочь мне исправить мой код? Заранее спасибо.

UPD Думаю, мой код работает как надо. Однако меня смущают эти индексы ... UPD 2 Исправлена ​​опечатка в элементе.

1 Ответ

0 голосов
/ 12 июля 2020

Нет ничего плохого в вашем коде или вашем результате. Массив в PHP всегда будет иметь связанный с ним ключ. И поскольку вы не указали ключ, он вернется к индексам по умолчанию (0, 1, 2 ...).

...