Суммируйте одно значение в многомерном ассоциативном массиве на основе сопоставления двух других значений (php)
У меня есть ассоциативный массив, который представляет собой статические фиктивные данные для макета, который заменяет базу данных. Я пытаюсь воспроизвести то, что GROUPBY YEAR и TitleText будет делать в MySQL, и я могу заставить его работать на одном поле - на TitleText или YEAR с использованием array_reduce, но я не могу понять, как сделать это на обоих полях вместе. Мне нужна одна строка для каждой комбинации YEAR и TitleText, которая суммирует единицы. Вот массив:
$monthly_sales = [
[
'XML_KEY' => '9992',
'MONTH' => get_relative_date(7)["Month"],
'YEAR' => get_relative_date(7)["Year"],
'TitleText' => '1984',
'units' => 15
], [
'XML_KEY' => '9990',
'MONTH' => get_relative_date(7)["Month"],
'YEAR' => get_relative_date(7)["Year"],
'TitleText' => 'Animal Farm',
'units' => 7
], [
'XML_KEY' => '9991',
'MONTH' => get_relative_date(7)["Month"],
'YEAR' => get_relative_date(7)["Year"],
'TitleText' => 'Keep the Aspidistra Flying',
'units' => 5
], [
'XML_KEY' => '9990',
'MONTH' => get_relative_date(6)["Month"],
'YEAR' => get_relative_date(6)["Year"],
'TitleText' => 'Animal Farm',
'units' => 6
], [
'XML_KEY' => '9991',
'MONTH' => get_relative_date(6)["Month"],
'YEAR' => get_relative_date(6)["Year"],
'TitleText' =>
'Keep the Aspidistra Flying',
'units' => 6
], [
'XML_KEY' => '9992',
'MONTH' => get_relative_date(6)["Month"],
'YEAR' => get_relative_date(6)["Year"],
'TitleText' => '1984',
'units' => 2
], [
'XML_KEY' => '9991',
'MONTH' => get_relative_date(5)["Month"],
'YEAR' => get_relative_date(5)["Year"],
'TitleText' => 'Keep the Aspidistra Flying',
'units' => 5
], [
'XML_KEY' => '9992',
'MONTH' => get_relative_date(5)["Month"],
'YEAR' => get_relative_date(5)["Year"],
'TitleText' => '1984',
'units' => 3
], [
'XML_KEY' => '9990',
'MONTH' => get_relative_date(5)["Month"],
'YEAR' => get_relative_date(5)["Year"],
'TitleText' => 'Animal Farm',
'units' => 3
], [
'XML_KEY' => '9990',
'MONTH' => get_relative_date(4)["Month"],
'YEAR' => get_relative_date(4)["Year"],
'TitleText' => 'Animal Farm',
'units' => 4
], [
'XML_KEY' => '9991',
'MONTH' => get_relative_date(4)["Month"],
'YEAR' => get_relative_date(4)["Year"],
'TitleText' => 'Keep the Aspidistra Flying',
'units' => 4
], [
'XML_KEY' => '9992',
'MONTH' => get_relative_date(4)["Month"],
'YEAR' => get_relative_date(4)["Year"],
'TitleText' => '1984',
'units' => 3
], [
'XML_KEY' => '9990',
'MONTH' => get_relative_date(3)["Month"],
'YEAR' => get_relative_date(3)["Year"],
'TitleText' => 'Animal Farm',
'units' => 10
], [
'XML_KEY' => '9992',
'MONTH' => get_relative_date(3)["Month"],
'YEAR' => get_relative_date(3)["Year"],
'TitleText' => '1984',
'units' => 4
], [
'XML_KEY' => '9991',
'MONTH' => get_relative_date(3)["Month"],
'YEAR' => get_relative_date(3)["Year"],
'TitleText' => 'Keep the Aspidistra Flying',
'units' => 1
], [
'XML_KEY' => '9990',
'MONTH' => get_relative_date(1)["Month"],
'YEAR' => get_relative_date(1)["Year"],
'TitleText' => 'Animal Farm',
'units' => 9
], [
'XML_KEY' => '9991',
'MONTH' => get_relative_date(1)["Month"],
'YEAR' => get_relative_date(1)["Year"],
'TitleText' => 'Keep the Aspidistra Flying',
'units' => 3
], [
'XML_KEY' => '9992',
'MONTH' => get_relative_date(1)["Month"],
'YEAR' => get_relative_date(1)["Year"],
'TitleText' => '1984',
'units' => 1
]
];
Вот результат, который я пытаюсь достичь:
Array
(
[0] => Array
(
[YEAR] => 2014
[TitleText] => 1984
[units] => 27
)
[1] => Array
(
[YEAR] => 2014
[TitleText] => Animal Farm
[units] => 30
)
[2] => Array
(
[YEAR] => 2014
[TitleText] => Keep the Aspidistra Flying
[units] => 21
)
[3] => Array
(
[YEAR] => 2015
[TitleText] => 1984
[units] => 1
)
[4] => Array
(
[YEAR] => 2015
[TitleText] => Animal Farm
[units] => 9
)
[5] => Array
(
[YEAR] => 2015
[TitleText] => Keep the Aspidistra Flying
[units] => 3
)
)
Я очень ценю любую помощь, которую вы можете предложить.
1 ответ
Решение
Если вы напишите свой массив как выход, который вы хотите, то лучше, я полагаю, что ваш массив $month_sales похож на:
Array
(
[0] => Array
(
[YEAR] => 2014
[TitleText] => 1984
[units] => 27
[XML_KEY] => 9992
[MONTH] => 10
)
)
Код:
$info = array();
$final = array();
for($i = 0; $i < count($monthly_sales); $i++) {
$year = $monthly_sales[$i]['YEAR'];
$title = $monthly_sales[$i]['TitleText'];
$info[$year][$title] += $monthly_sales[$i]['units'];
}
$i = 0;
foreach ($info as $year => $data) {
foreach($data as $title => $units) {
$final[$i]['Year'] = $year;
$final[$i]['TitleText'] = $title;
$final[$i]['units'] = $units;
$i++;
}
}
print_r($final);