Группировка многомерного массива с array_combine
Имеется два массива.
Ключи - $keys = ['a', 'b', 'b', 'c'];
Значения -
$values = [
['id' => 1, 'name' => 'Apple'],
['id' => 2, 'name' => 'Ball'],
['id' => 3, 'name' => 'Bridge'],
['id' => 4, 'name' => 'Color'],
];
Когда я пытаюсь объединить эти два массива с помощью array_combine, я получаю такой результат. То есть, значение с id = 2 теряется.
[
'a' => ['id' => 1, 'name' => 'Apple'],
'b' => ['id' => 3, 'name' => 'Bridge'],
'c' => ['id' => 4, 'name' => 'Color'],
];
Могу я каким-то образом получить результат такого вида?
[
'a' => ['id' => 1, 'name' => 'Apple'],
'b' => [
0 => ['id' => 2, 'name' => 'Ball'],
1 => ['id' => 3, 'name' => 'Bridge'],
],
'c' => ['id' => 4, 'name' => 'Color'],
];
Ответы (1 шт):
Автор решения: Dmitry
→ Ссылка
Решение "в лоб":
// Подсчитываем количество одинаковых ключей в массиве ключей $keys.
// Это нужно для того, чтобы определить сколько элементов
// в массиве значений $values соответствует каждому ключу
$count = array_count_values($keys);
$result = [];
// Далее проходим по всем ключам из массива ключей $keys
foreach ($keys as $index => $key) {
if ($count[$key] === 1) {
// Если очередному ключу $key соответствует
// только один элемент из массива значений $values,
// то присваиваем этот элемент по ключу $key
$result[$key] = $values[$index];
} else {
// Если очередному ключу $key соответствует
// несколько элементов из массива значений $values,
// то добавляем этот элемент в массив
$result[$key][] = $values[$index];
}
}
Решение предполагает, что количество элементов в массиве ключей $keys равно количеству элементов массива значений $values.