如何在PHP中重新排列多维数组
我有一个数组,其格式如下:如何在PHP中重新排列多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个数组,其格式如下: Array ( [Jan 14] => Array ( [wasteHierarchy] => Recycling [completionDate] => Jan 14 [totalUom] => 102854 ) [Feb 14] => Array ( [wasteHierar
Array
(
[Jan 14] => Array
(
[wasteHierarchy] => Recycling
[completionDate] => Jan 14
[totalUom] => 102854
)
[Feb 14] => Array
(
[wasteHierarchy] => Recycling
[completionDate] => Feb 14
[totalUom] => 83954
)
[Mar 14] => Array
(
[wasteHierarchy] => Landfill
[completionDate] => Mar 14
[totalUom] => 97506
)
)
但是,我需要更改阵列的布局方式。我要创建以下格式的数组:
Array
(
[Recycling] => Array
(
[Jan 14] => 102854
[Feb 14] => 83954
)
[Landfill] => Array
(
[Mar 14] => 97506
)
)
这是我目前掌握的代码:
$whmOutput = Array();
foreach($wasteHierMonArr as $whm) {
$dateChanged = date("M y", strtotime($whm['completion_date']));
$whmOutput_element = &$whmOutput[$dateChanged];
$whmOutput_element['wasteHierarchy'] = $whm['waste_hierarchy'];
$whmOutput_element['completionDate'] = $dateChanged;
!isset($whmOutput_element['totalUom']) && $whmOutput_element['totalUom'] = 0;
$whmOutput_element['totalUom'] += $whm['totalTonne'];
}
$newWHM = array();
foreach($whmOutput as $whm) {
$dateChanged = $whm['completionDate'];
$wasteHierarchy = $whm['wasteHierarchy'];
$totalUom = +$whm['totalUom'];
$newWHM[$wasteHierarchy][$dateChanged] = $totalUom;
}
但是,这只返回一个数组:
Array
(
[Recycling] => Array
(
[Jan 14] => 102854
[Feb 14] => 83954
)
)
我做错了什么
编辑
$wastehiermonar是从SQL语句生成的:
SELECT SUM(total_uom) AS totalTonne, waste_hierarchy, completion_date
FROM enviro_figures_upload
WHERE completion_date != ''
AND waste_hierarchy != ''
GROUP BY waste_hierarchy, DATE_FORMAT(completion_date, '%m-%Y') DESC
ORDER BY YEAR(completion_date) ASC, MONTH(completion_date) ASC, waste_hierarchy ASC
尝试:
假设$whmOutput是您所说的,您的代码的第二部分应该可以正常工作。输出直接来自使用上述代码的应用程序,因此所有输出都是真实的$WasteHierMonar是从SQL查询生成的,这会导致问题吗?为了帮助您的其他人,我建议创建一个脚本来重现您的问题;i、 创建一个提琴,3v4l,代码板,随便什么。Lol拿起你的选择-3个相同的答案在40秒内发布。一定是对的:没有一个有效。如果将其放在与描述相同的foreach中,则不会返回结果。如果我将代码放在$whmOutput循环中,它将返回与我得到的结果相同的结果。这在$WASSHIERMONARR循环中没有返回任何结果,我将其移动到$whmOutput循环中,它将返回与我以前得到的结果相同的结果。
foreach($wasteHierMonArr as $datekey => $dta){
$newWHM[$dta['wasteHierarchy']][$datekey] = $dta['totalUom];
}
<?php
$whmOutput = Array();
foreach ($wasteHierMonArr as $whm) {
$whmOutput[$whm['wasteHeirarchy']][$whm['completionDate']] = $whm['totalUom'];
}
$result = [];
foreach ($wasteHierMonArr as $data) {
$result[$data['wasteHierarchy']][$data['completionDate']] = $data['totalUom'];
}
print_r($result);