Сгруппируйте данные двухмерного массива по двум столбцам, чтобы сформировать трехмерный ассоциативный массив с суммирова ⇐ Php
Сгруппируйте данные двухмерного массива по двум столбцам, чтобы сформировать трехмерный ассоциативный массив с суммирова
У меня есть 2D-массив с этими данными:
[ [ "всегоТонна" => 11180, "wasteHierarchy" => "Утилизация (Свалка)", "Дата завершения" => "14.05.2014" ], [ "всегоТонна" => 820, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.06.2014" ], [ "всегоТонна" => 21040, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.08.2014" ], [ "всегоТонна" => 7020, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.11.2014" ], [ "всегоТонна" => 6660, "wasteHierarchy" => "Переработка", "Дата завершения" => "14 июля 2014 г." ], [ "всегоТонна" => 12000, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.09.2014" ], [ "всегоТонна" => 8900, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.10.2014" ], [ "всегоТонна" => 9100, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.12.2014" ], [ "всегоТонна" => 5520, "wasteHierarchy" => "Переработка", "Дата завершения" => "15 января 2015 г." ], [ "всегоТонна" => 1900, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.08.2014" ], [ "всегоТонна" => 5950, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.11.2014" ], [ "всегоТонна" => 12000, "wasteHierarchy" => "Переработка", "Дата завершения" => "14 июля 2014 г." ], [ "totalTonne" => 10480, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.09.2014" ], [ "всегоТонна" => 8900, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.10.2014" ], [ "всегоТонна" => 10060, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.12.2014" ], [ "всегоТонна" => 15500, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.06.2014" ], [ "всегоТонна" => 8850, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.11.2014" ] ] Я хотел бы преобразовать его в трехмерный массив, который группируется по значениям wasteHierarchy на первом уровне, затем по значениям completionDate на втором уровне, а затем суммирует totalTonne значения в каждой группе.
Желаемый результат:
[Утилизация (Свалка)] => Массив ( [14 мая] => 11180 ) [Восстановление энергии] => Массив ( [14 июня] => 16320 [14 авг.] => 22940 [14 ноября] => 21820 ) [Переработка] => Массив ( [14 июля] => 18660 [14 сен] => 22480 [14 Окт] => 17800 [14 декабря] => 19160 [15 янв.] => 5520 ) На данный момент у меня есть PHP-код:
$whmOutput = Array(); foreach($wasteHierMon as $whm) { $dateChanged = date("Мой год", strtotime($whm['completionDate'])); $whmOutput_element = &$whmOutput[$dateChanged]; $whmOutput_element['wasteHierarchy'] = $whm['wasteHierarchy']; $whmOutput_element['completionDate'] = $dateChanged; !isset($whmOutput_element['totalUom']) && $whmOutput_element['totalUom'] = 0; $whmOutput_element['totalUom'] += $whm['totalTonne']; } $newWHM = массив(); foreach($whmOutput как $whm) { $dateChanged = $whm['completionDate']; $wasteHierarchy = $whm['wasteHierarchy']; $totalUom = +$whm['totalUom']; $newWHM[$wasteHierarchy][$dateChanged] = $totalUom; } Однако этот код не выполняет свою работу должным образом. Хотя он создает структуру, которая мне нужна, но он не меняет данные должным образом. Он неправильно группирует даты, и поэтому значение totalTonne для него неверно.
Как я могу изменить код, чтобы добиться этого?
У меня есть 2D-массив с этими данными:
[ [ "всегоТонна" => 11180, "wasteHierarchy" => "Утилизация (Свалка)", "Дата завершения" => "14.05.2014" ], [ "всегоТонна" => 820, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.06.2014" ], [ "всегоТонна" => 21040, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.08.2014" ], [ "всегоТонна" => 7020, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.11.2014" ], [ "всегоТонна" => 6660, "wasteHierarchy" => "Переработка", "Дата завершения" => "14 июля 2014 г." ], [ "всегоТонна" => 12000, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.09.2014" ], [ "всегоТонна" => 8900, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.10.2014" ], [ "всегоТонна" => 9100, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.12.2014" ], [ "всегоТонна" => 5520, "wasteHierarchy" => "Переработка", "Дата завершения" => "15 января 2015 г." ], [ "всегоТонна" => 1900, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.08.2014" ], [ "всегоТонна" => 5950, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.11.2014" ], [ "всегоТонна" => 12000, "wasteHierarchy" => "Переработка", "Дата завершения" => "14 июля 2014 г." ], [ "totalTonne" => 10480, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.09.2014" ], [ "всегоТонна" => 8900, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.10.2014" ], [ "всегоТонна" => 10060, "wasteHierarchy" => "Переработка", "Дата завершения" => "14.12.2014" ], [ "всегоТонна" => 15500, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.06.2014" ], [ "всегоТонна" => 8850, "wasteHierarchy" => "Восстановление энергии", "Дата завершения" => "14.11.2014" ] ] Я хотел бы преобразовать его в трехмерный массив, который группируется по значениям wasteHierarchy на первом уровне, затем по значениям completionDate на втором уровне, а затем суммирует totalTonne значения в каждой группе.
Желаемый результат:
[Утилизация (Свалка)] => Массив ( [14 мая] => 11180 ) [Восстановление энергии] => Массив ( [14 июня] => 16320 [14 авг.] => 22940 [14 ноября] => 21820 ) [Переработка] => Массив ( [14 июля] => 18660 [14 сен] => 22480 [14 Окт] => 17800 [14 декабря] => 19160 [15 янв.] => 5520 ) На данный момент у меня есть PHP-код:
$whmOutput = Array(); foreach($wasteHierMon as $whm) { $dateChanged = date("Мой год", strtotime($whm['completionDate'])); $whmOutput_element = &$whmOutput[$dateChanged]; $whmOutput_element['wasteHierarchy'] = $whm['wasteHierarchy']; $whmOutput_element['completionDate'] = $dateChanged; !isset($whmOutput_element['totalUom']) && $whmOutput_element['totalUom'] = 0; $whmOutput_element['totalUom'] += $whm['totalTonne']; } $newWHM = массив(); foreach($whmOutput как $whm) { $dateChanged = $whm['completionDate']; $wasteHierarchy = $whm['wasteHierarchy']; $totalUom = +$whm['totalUom']; $newWHM[$wasteHierarchy][$dateChanged] = $totalUom; } Однако этот код не выполняет свою работу должным образом. Хотя он создает структуру, которая мне нужна, но он не меняет данные должным образом. Он неправильно группирует даты, и поэтому значение totalTonne для него неверно.
Как я могу изменить код, чтобы добиться этого?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение