Объединить несколько массивов с одним ключом массива

У меня есть ситуация в 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',
  ),
)
Другие вопросы по тегам