При просмотре ваших данных кажется, что «ДАТА» сама по себе является «ключом». Учитывая эту логику, функция «array_indexer» преобразует существующую точку данных, скажем, как $ volume380, в индексированный массив, используя «DATE» в качестве ключа для массива. Вторая функция «array_deindexer» создана для возврата формата массива к тому, в котором отображаются ваши исходные данные.
Объединение происходит внутри функции "array_combiner", которая "индексирует" как данный новый массив, так и накопленный массив, а затем объединяет общие ключи (как в значении "DATE").
Полный код указан ниже:
$volume380 = array (
array (
"DATE" => "2018-07-30",
"VOLUME380" => 813.0
),
array (
"DATE" => "2018-07-31",
"VOLUME380" => 1188.0
),
array (
"DATE" => "2018-08-01",
"VOLUME380" => 1081.0
),
array (
"DATE" => "2018-08-02",
"VOLUME380" => 886.0
)
);
$array_final = array_combiner($volume380);
$volume320 = array (
array (
"DATE" => "2018-07-30",
"VOLUME320" => 813.0
),
array (
"DATE" => "2018-07-31",
"VOLUME320" => 1188.0
),
array (
"DATE" => "2018-08-02",
"VOLUME320" => 1081.0
)
);
$array_final = array_combiner($volume320);
$volume800 = array (
array (
"DATE" => "2018-07-30",
"VOLUME800" => 813.0
),
array (
"DATE" => "2018-07-31",
"VOLUME800" => 1188.0
),
array (
"DATE" => "2018-08-01",
"VOLUME800" => 1081.0
),
array (
"DATE" => "2018-08-02",
"VOLUME800" => 886.0
)
);
$array_final = array_combiner($volume800);
print_r($array_final);
function array_combiner($array_tmp) {
global $array_final;
$array_tmp = array_indexer($array_tmp);
$tmp = array();
if (count($array_final) > 0) {
$tmp = array_indexer($array_final);
foreach ($array_tmp as $k1 => $v1) {
if (!isset($tmp[$k1])) $tmp[$k1] = array();
foreach ($v1 as $k2 => $v2) {
$tmp[$k1][$k2] = $v2;
}
}
} else $tmp = $array_tmp;
return array_deindexer($tmp);
}
function array_indexer($array_tmp) {
$tmp = array();
foreach ($array_tmp as $k1 => $v1) {
$index = "";
$data = array();
foreach ($v1 as $k2 => $v2) {
if ($k2 == "DATE") $index = $v2;
else $data[$k2] = $v2;
}
if (strlen($index) > 0) $tmp[$index] = $data;
}
return $tmp;
}
function array_deindexer($array_tmp) {
$tmp = array();
$i = 0;
foreach ($array_tmp as $k1 => $v1) {
$tmp[$i]["DATE"] = $k1;
foreach ($v1 as $k2 => $v2) $tmp[$i][$k2] = $v2;
$i++;
}
return $tmp;
}