Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中重新排列多维数组_Php_Arrays_Multidimensional Array - Fatal编程技术网

如何在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);