@danilapon

Как собрать массив массивов, имея массивы ключей, ключей и значений вложенных массивов?

Имеются вот такие массивы:

$input = [
    '111',
    '222',
];
$array1 = [
    'new',
    'confirmed'
];
$array2 = [
    '7777',
    'XXXX'
];
$params = [
    'state',
    'warehouse'
];

Необходимо получить массив:

Array
(
   [111] => Array
                  (
                  [state] => 'new'
                  [warehouse] => '7777'
                  )
   [222] => Array
                  (
                  [state] => 'confirmed'
                  [warehouse] => 'XXXX'
                  )
)

Массив $input содержит ключи для элементов первого уровня, их значениями являются подмассивы с ключами из массива $params и к каждому такому ключу задаются по очереди значения из массивов $array1 $array2 и т.д.

Каждый из массивов уже упорядочен, то есть места значений в массивах $input $array1 $array2 относятся к одной сущности, например, если взять второе место, то получается 222(id) + confirmed(статус) + XXXX(имя сущности).

Как оформить цикл формирования описанного массива?
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
@StockholmSyndrome
$input = [
    '111',
    '222',
];

$arrays = [
    [
        'new',
        'confirmed'
    ],
    [
        '7777',
        'XXXX'
    ]
];

$params = [
    'state',
    'warehouse'
];

$result = [];

for ($i = 0; $i < count($input); $i++) {
    $key = $input[$i];
    $result[$key] = [];
    for ($j = 0; $j < count($params); $j++) {
        $result[$key][$params[$j]] = $arrays[$j][$i];
    }
}

print_r($result);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F
function combine($ids, $keys, ...$values) {
  return array_combine(
    $ids,
    array_map(
      fn($i) => array_combine($keys, array_column($values, $i)),
      array_keys($ids)
    )
  );
}


$result = combine($input, $params, $array1, $array2);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы