Объединение массивов в один
Есть 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);