У меня есть проблема, как суммировать значения двух многомерных массивов в PHP.
Например, два массива хранятся в переменных $ array_1 а также $ array_2
И $ array_1, и $ array_2 имеют вложенные массивы, в которых снова хранятся данные в соответствующих массивах. Обратите внимание, что данные организованы в виде x-данных и y-данных, где y-данные — это просто штамп DATE.
Мне нужно СУММИТЬ значения x-data этих двух массивов $ array_1 и $ array_2 относительно измерения y-data (DATE). Вот почему это было сложно для меня, закрытые ответы, которые я нашел, имеют только цифры.
Пример:
$ array_1
Array
(
[0] => object
(
[x-data] => Array
(
[data1] => 0
[data2] => 1
[data3] => 2
[data4] => 3
[data5] => 4
[data6] => 5
[data7] => 6
[data8] => 7
)
[y-data] => Array
(
[date] => 20141127
)
)
[1] => object
(
[x-data] => Array
(
[data1] => 2
[data2] => 4
[data3] => 6
[data4] => 8
[data5] => 10
[data6] => 12
[data7] => 14
[data8] => 16
)
[y-data] => Array
(
[date] => 20141128
)
)
)
$ array_2
Array
(
[0] => object
(
[x-data] => Array
(
[data1] => 0
[data2] => 1
[data3] => 2
[data4] => 3
[data5] => 4
[data6] => 5
[data7] => 6
[data8] => 7
)
[y-data] => Array
(
[date] => 20141127
)
)
[1] => object
(
[x-data] => Array
(
[data1] => 0
[data2] => 1
[data3] => 2
[data4] => 3
[data5] => 4
[data6] => 5
[data7] => 6
[data8] => 7
)
[y-data] => Array
(
[date] => 20141128
)
)
)
$ result = $ array_1 + $ array_2 должен выглядеть так:
Array
(
[0] => object
(
[x-data] => Array
(
[data1] => 0
[data2] => 2
[data3] => 4
[data4] => 6
[data5] => 8
[data6] => 10
[data7] => 12
[data8] => 14
)
[y-data] => Array
(
[date] => 20141127
)
)
[1] => object
(
[x-data] => Array
(
[data1] => 2
[data2] => 5
[data3] => 8
[data4] => 11
[data5] => 14
[data6] => 17
[data7] => 20
[data8] => 23
)
[y-data] => Array
(
[date] => 20141128
)
)
)
Я пробовал некоторые вещи, такие как foreach () внутри foreach (), но я получил эффект умножения значений массива (2 x 2 = 4 подмассива вместо 2).
Любая помощь?
Спасибо!
Вот частичный ответ, так как он должен работать только в том случае, если $ array1 и $ array2 имеют одинаковое количество элементов и имеют уникальные y-данные, и каждый из их x-данных (с общими y-данными) имеет одинаковое количество элементов.
$result = array_multisum($array1, $array2);
function array_multisum($array1, $array2)
{
$newArray = array();
foreach ($array1 as $object1) {
$newObject = new stdClass();
// find object in the 2nd array having the same data as current object
foreach ($array2 as $object2) {
// if object is found, sum the x-data with the current object
if ($object1->{'y-data'}['date'] === $object2->{'y-data'}['date']) {
$newObject->{'x-data'} = data_sum($object1->{'x-data'}, $object2->{'x-data'});
break;
}
}
$newObject->{'y-data'} = $object1->{'y-data'};
$newArray[] = $newObject;
}
return $newArray;
}
function data_sum($data1, $data2)
{
$newData = array();
// sum up the values for each key
foreach (array_keys($data1) as $key) {
$newData[$key] = $data1[$key] + $data2[$key];
}
return $newData;
}
Других решений пока нет …