Объединить несколько массивов с одним ключом массива - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть ситуация в 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]. Цель состоит в том, чтобы я мог легко идентифицировать все значения, связанные с сервисом, по его Id Кто-нибудь может подсказать?

1 Ответ

0 голосов
/ 19 февраля 2020

array_map является ключевым здесь. Оставьте первый аргумент как нулевой, и он будет сгруппирован так, как вы хотите:

<?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',
  ),
)
...