Объединить несколько массивов с одним ключом массива
У меня есть ситуация в PHP, когда мне нужно объединить несколько значений массива и привязать к первому ключу массива, скажем, у меня есть следующий массив,
[services] => Array
(
[0] => 1
[1] => 2
[2] => 1
)
[package_type] => Array
(
[0] => 1
[1] => 2
[2] => 1
)
[service_desc] => Array
(
[0] => Full HD
[1] => Full HD
[2] => Full HD
)
[service_price] => Array
(
[0] => 500
[1] => 600
[2] => 500
)
Теперь я хочу связать весь массив с ключами типа службы, например services [0], будет иметь значение package_type [0], service_desc [0] и service_price[0]. Цель состоит в том, чтобы я мог легко идентифицировать все значения, связанные с сервисом, по его идентификатору. Кто-нибудь может подсказать?
1 ответ
array_map
является ключевым здесь. Оставьте первый аргумент равным null, и он будет группироваться по вашему желанию:
<?php
$data =
[
'services' =>
[
'programming',
'debugging'
],
'description' =>
[
'the process of writing computer programs.',
'the process of identifying and removing errors from software/hardware'
]
];
$result = array_map(null, $data['services'], $data['description']);
var_export($result);
Выход:
array (
0 =>
array (
0 => 'programming',
1 => 'the process of writing computer programs.',
),
1 =>
array (
0 => 'debugging',
1 => 'the process of identifying and removing errors from software/hardware',
),
)
Вместо того, чтобы записывать все ключи в качестве аргументов, вы можете распаковать их следующим образом:
array_map(null, ...array_values($data));
Для чего-то более сложного пройдите array_map
вызываемый:
$keys = array_keys($data);
$result = array_map(function(...$args) use ($keys) {
return array_combine($keys, $args);
}, ...array_values($data));
var_export($result);
Выход:
array (
0 =>
array (
'services' => 'programming',
'description' => 'the process of writing computer programs.',
),
1 =>
array (
'services' => 'debugging',
'description' => 'the process of identifying and removing errors from software/hardware',
),
)