Я пытаюсь создать один массив из двух.Два массива могут иметь разную длину, поэтому результат объединения должен учитывать это и заполнять пробелы с помощью null
.
Насколько я понимаю, сначала нужно найти больший массив и выполнить цикл с ним, заполнить пробелы в меньшем массиве икак только это будет сделано, объедините его.
Это то, что я сделал до сих пор, но это кажется очень неуклюжим, и я начинаю думать - должен быть лучший способ - меньше циклов и, возможно, использованиенекоторые из методов помощников массива php?
<?php
$result_keys = [];
$result_data = [];
$bigger = null;
$smaller = null;
$array1 = [
[
'dog' => 2,
'cat' => 3,
],
[
'dog' => 4,
'cat' => 2,
],
[
'dog' => 2,
'cat' => 3
]
];
$array2 = [
[
'bird' => 7,
],
[
'bird' => 5
]
];
// find which array is bigger
if (count($array1) >= count($array2)) {
$bigger = $array1;
$smaller = $array2;
} else {
$bigger = $array2;
$smaller = $array1;
};
// loop over bigger array
foreach ($bigger as $i => $record) {
foreach ($record as $key => $value) {
if ($i === 0) {
$result_keys[] = $key;
};
$result_data[$i][] = $value;
}
// fill gaps in smaller array
if (!isset($smaller[$i])) {
foreach ($smaller[$i-1] as $key => $value) {
$smaller[$i][$key] = null;
}
}
};
// loop over smaller array
foreach ($smaller as $i => $record) {
foreach ($record as $key => $value) {
if ($i === 0) {
$result_keys[] = $key;
};
$result_data[$i][] = $value;
}
};
var_dump($result_keys);
var_dump($result_data);
// // expected result
// $result_keys = ['dog', 'cat', 'bird'];
// $result_data = [
// [2,3,7],
// [4,2,5],
// [2,3,null]
// ];