Объединение массивов в один

Есть 2 массива (ниже привел какие могут быть, но они всегда могут быть разными)

   $array1 = [[1234, 543], 76, [444, 77, 87]];

   $array2 = [1221, 90, [44, 55]];

Подскажите, как получить из $array1 и $array2 вот такой один $array3 массив

$array3 = [[1234, 543, 1221], [76, 90], [444, 77, 87, 44, 55]];

Ответы (3 шт):

Автор решения: Алексей Шиманский
$array1 = [[1234, 543], 76, [444, 77, 87]];
$array2 = [1221, 90, [44, 55]];
$result = [];

for ($i = 0; $i <  count($array1); ++$i) {
    $result[] = array_merge(is_array($array1[$i]) ? $array1[$i] : [$array1[$i]], is_array($array2[$i]) ? $array2[$i] : [$array2[$i]]);
}
→ Ссылка
Автор решения: Егор Банин

У вас нетипизированные массивы. То есть по какой-то странной причине они содержат и числа и массивы чисел. PHP позволяет делать такие штуки, но вам не следует злоупотреблять этим. В большинстве случаев вы можете и должны создавать массивы со значениями одинакового типа.

Обратите внимание, что число в вашем случае эквивалентно массиву из одного числа. То есть если заменить 76 на [76], то ваш алгоритм должен будет выдать тот же результат. При этом работать с одинаковыми типами гораздо проще.

Когда вы конструируете эти массивы, приводите значение к массиву. Я использую array_map, но можете сделать это foreach'ем:

$a = [[1234, 543], 76, [444, 77, 87]];
$b = [1221, 90, [44, 55]];
$a = array_map(fn($v) => (array) $v, $a);
$b = array_map(fn($v) => (array) $v, $b);
var_dump($a, $b);

Теперь все значения ваших массивов массивы и вы можете применить функцию array_merge чтобы объединить их:

$c = array_map(fn($v1, $v2) => array_merge($v1, $v2), $a, $b);
var_dump($c);

Может показаться, что этот метод неоптимальный, так как я сначала делаю подготовку массивов. Но в реальных задачах вы можете обеспечить типизацию на этапе конструирования исходных массивов, и тогда подготовка просто не понадобится.

→ Ссылка
Автор решения: Сергей
$array1 = [[1234, 543], 76, [444, 77, 87]];
$array2 = [1221, 90, [44, 55]];

$array3 = [];

foreach ($array1 as $i => $value) {
  if (is_array($value)) {
    $array3[$i] = $value;
  } else {
    $array3[$i] = array($value);
  }
}

foreach ($array2 as $i => $value) {
  if (is_array($value)) {
    $array3[count($array1) + $i] = $value;
  } else {
    $array3[count($array1) + $i] = array($value);
  }
}

$array3 = array_merge($array3);

print_r($array3);
→ Ссылка