Php 合计数组中的值并按新索引分组

Php 合计数组中的值并按新索引分组,php,Php,我有一个数组(如下所示),该数组当前按员工编制索引,因此它会给我一个员工的起始键,然后按部门列出他们的销售/下载总数(16541675) 我要做的是循环使用这个,只需在部门中设置这个新数组的键。我有几个类别,但我只是为了简单起见展示门票。我想按部门编制索引并循环添加其中的所有合计,这样我最终只得到两个主要级别,因此即使我有30名员工,我仍然只显示1654和1675的两个级别,但它汇总了所有类别,正如它们已经显示的那样。我想保持格式不变,只需将每个索引的总数相加 我的问题是,我有点迷失在我的循环中

我有一个数组(如下所示),该数组当前按员工编制索引,因此它会给我一个员工的起始键,然后按部门列出他们的销售/下载总数(16541675)

我要做的是循环使用这个,只需在部门中设置这个新数组的键。我有几个类别,但我只是为了简单起见展示门票。我想按部门编制索引并循环添加其中的所有合计,这样我最终只得到两个主要级别,因此即使我有30名员工,我仍然只显示1654和1675的两个级别,但它汇总了所有类别,正如它们已经显示的那样。我想保持格式不变,只需将每个索引的总数相加

我的问题是,我有点迷失在我的循环中,以及在哪里/如何正确地迭代它

有人能帮我指出正确的方向吗

<?php
    $data =[
        'Employee1' => [
            "1654" => [
                "Tickets" => [
                    "Tickets" => [
                       'saved' => [
                            'up_to_date' => 210,
                            'old_goal' => 200,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'downloaded' => [
                            'up_to_date' => 100,
                            'old_goal' => 40,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'overflow' => 145,
                        'projDownload' => 45,
                        'saved_percent' => 25,
                        'downloaded_percent' => 14,
                    ],
                ],
                "total" => [
                   'saved' => [
                        'up_to_date' => 210,
                        'old_goal' => 200,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'downloaded' => [
                        'up_to_date' => 100,
                        'old_goal' => 40,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'overflow' => 145,
                    'projDownload' => 45,
                    'saved_percent' => 25,
                    'downloaded_percent' => 14,
                ],
            ],
            "1675" => [
                "Tickets" => [
                    "Tickets" => [
                       'saved' => [
                            'up_to_date' => 210,
                            'old_goal' => 200,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'downloaded' => [
                            'up_to_date' => 100,
                            'old_goal' => 40,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'overflow' => 145,
                        'projDownload' => 45,
                        'saved_percent' => 25,
                        'downloaded_percent' => 14,
                    ],
                ],
                "total" => [
                    'saved' => [
                        'up_to_date' => 210,
                        'old_goal' => 200,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'downloaded' => [
                        'up_to_date' => 100,
                        'old_goal' => 40,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'overflow' => 145,
                    'projDownload' => 45,
                    'saved_percent' => 25,
                    'downloaded_percent' => 14,
                ],
            ]
        ],
    'employee2' => [
            "1654" => [
                "Tickets" => [
                    "Tickets" => [
                       'saved' => [
                            'up_to_date' => 210,
                            'old_goal' => 200,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'downloaded' => [
                            'up_to_date' => 100,
                            'old_goal' => 40,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'overflow' => 145,
                        'projDownload' => 45,
                        'saved_percent' => 25,
                        'downloaded_percent' => 14,
                    ],
                ],
                "total" => [
                   'saved' => [
                        'up_to_date' => 210,
                        'old_goal' => 200,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'downloaded' => [
                        'up_to_date' => 100,
                        'old_goal' => 40,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'overflow' => 145,
                    'projDownload' => 45,
                    'saved_percent' => 25,
                    'downloaded_percent' => 14,
                ],
            ],
            "1675" => [
                "Tickets" => [
                    "Tickets" => [
                       'saved' => [
                            'up_to_date' => 210,
                            'old_goal' => 200,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'downloaded' => [
                            'up_to_date' => 100,
                            'old_goal' => 40,
                            'now' => 100,
                            'comparison' => 200
                        ],
                        'overflow' => 145,
                        'projDownload' => 45,
                        'saved_percent' => 25,
                        'downloaded_percent' => 14,
                    ],
                ],
                "total" => [
                    'saved' => [
                        'up_to_date' => 210,
                        'old_goal' => 200,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'downloaded' => [
                        'up_to_date' => 100,
                        'old_goal' => 40,
                        'now' => 100,
                        'comparison' => 200
                    ],
                    'overflow' => 145,
                    'projDownload' => 45,
                    'saved_percent' => 25,
                    'downloaded_percent' => 14,
                ],
            ]
        ]
    ];

    foreach ($data as $userName => $emps) {
        foreach ($emps as $empIndex => $category) {
            if (!array_key_exists($empIndex, $finalResults)) {
                $finalResults[$empIndex] = [
                    'total' => [
                        'saved' => [
                            'up_to_date' => 0,
                            'old_goal' => 0,
                            'now' => 0,
                            'week_last_yaer' => 0
                        ],
                        'downloaded' => [
                            'up_to_date' => 0,
                            'old_goal' => 0,
                            'now' => 0,
                            'week_last_yaer' => 0
                        ],
                        'overflow' => 0,
                        'saved_percent' => 0,
                        'downloaded_percent' => 0,
                        'projDownload' => 0,
                    ]
                ];
            }
            foreach ($category as $catIndex => $categoryDetails) {
                foreach( $categoryDetails as $totals => $catTotals){
                    if (!array_key_exists($catIndex, $finalResults[$empIndex])) {
                    $finalResults[$empIndex][$catIndex] = [];
                    }
                    if ($catIndex !== 'total') {
                        foreach ($categoryDetails as $productCode => $productData) {
                            if (!array_key_exists($productCode, $finalResults[$empIndex][$catIndex])) {
                                $finalResults[$empIndex][$catIndex][$productCode] = [
                                   
                                ];
                            }
                            //iterate and add
                        }
                    } else {
                        //iterate and add
                    }
                }
            }
        }
    };

    print_r($finalResults);
    ?>

好的,我想这会产生你想要的输出

function thing($addTo, $new){
    
    if (is_array($new)){
        foreach($new as $k => $v){
            if (is_array($v)){
                $addTo[$k] = thing($addTo[$k], $v);
            }else{
                $addTo[$k] += $v;
            }
            
        }
    }else{
        $addTo += $new;
    }
    
    return $addTo;
}




$newArray = [];

foreach ($data as $employee) {
    foreach($employee as $deptName => $dept){
        
        // Department doesn't exist, add it to array
        if (!array_key_exists($deptName, $newArray)) {
            $newArray[$deptName] = $dept;
        }else{ // Department exist already, combine them
            
            $newArray[$deptName] = thing($newArray[$deptName], $dept);
        }
    }
}
        

echo "<pre>";
print_r($newArray);
echo "</pre>";
函数对象($addTo,$new){
如果(是_数组($new)){
foreach($k=>v的新版本){
if(is_数组($v)){
$addTo[$k]=事物($addTo[$k],$v);
}否则{
$addTo[$k]+=$v;
}
}
}否则{
$addTo+=$new;
}
返回$addTo;
}
$newArray=[];
foreach($employee数据){
foreach($deptName=>$dept的员工){
//部门不存在,请将其添加到阵列
如果(!array\u key\u存在($deptName,$newArray)){
$newArray[$deptName]=$dept;
}否则{//部门已存在,请合并它们
$newArray[$deptName]=thing($newArray[$deptName],$dept);
}
}
}
回声“;
打印(新数组);
回声“;

您可以使用递归方法解决此问题

假设你有这样的数据

$data=[
“雇员1”=>[
"1654" => [
“门票”=>[
“门票”=>[
“已保存”=>[
“最新”=>210,
“旧目标”=>200,
“现在”=>100,
“比较”=>200
],
“已下载”=>[
“最新”=>100,
“老目标”=>40,
“现在”=>100,
“比较”=>200
],
“溢出”=>145,
“projDownload”=>45,
“保存百分比”=>25,
“下载百分比”=>14,
],
],
“总计”=>[
“已保存”=>[
“最新”=>210,
“旧目标”=>200,
“现在”=>100,
“比较”=>200
],
“已下载”=>[
“最新”=>100,
“老目标”=>40,
“现在”=>100,
“比较”=>200
],
“溢出”=>145,
“projDownload”=>45,
“保存百分比”=>25,
“下载百分比”=>14,
],
],
"1675" => [
“门票”=>[
“门票”=>[
“已保存”=>[
“最新”=>210,
“旧目标”=>200,
“现在”=>100,
“比较”=>200
],
“已下载”=>[
“最新”=>100,
“老目标”=>40,
“现在”=>100,
“比较”=>200
],
“溢出”=>145,
“projDownload”=>45,
“保存百分比”=>25,
“下载百分比”=>14,
],
],
“总计”=>[
“已保存”=>[
“最新”=>210,
“旧目标”=>200,
“现在”=>100,
“比较”=>200
],
“已下载”=>[
“最新”=>100,
“老目标”=>40,
“现在”=>100,
“比较”=>200
],
“溢出”=>145,
“projDownload”=>45,
“保存百分比”=>25,
“下载百分比”=>14,
],
]
],
‘雇员2’=>[
"1654" => [
“门票”=>[
“门票”=>[
“已保存”=>[
“最新”=>210,
“旧目标”=>200,
“现在”=>100,
“比较”=>200
],
“已下载”=>[
“最新”=>100,
“老目标”=>40,
“现在”=>100,
“比较”=>200
],
“溢出”=>145,
“projDownload”=>45,
“保存百分比”=>25,
“下载百分比”=>14,
],
],
“总计”=>[
“已保存”=>[
“最新”=>210,
“旧目标”=>200,
“现在”=>100,
“比较”=>200
],
“已下载”=>[
“最新”=>100,
“老目标”=>40,
“现在”=>100,
“比较”=>200
],
“溢出”=>145,
“projDownload”=>45,
“保存百分比”=>25,
“下载百分比”=>14,
],
],
"1675" => [
function thing($addTo, $new){
    
    if (is_array($new)){
        foreach($new as $k => $v){
            if (is_array($v)){
                $addTo[$k] = thing($addTo[$k], $v);
            }else{
                $addTo[$k] += $v;
            }
            
        }
    }else{
        $addTo += $new;
    }
    
    return $addTo;
}




$newArray = [];

foreach ($data as $employee) {
    foreach($employee as $deptName => $dept){
        
        // Department doesn't exist, add it to array
        if (!array_key_exists($deptName, $newArray)) {
            $newArray[$deptName] = $dept;
        }else{ // Department exist already, combine them
            
            $newArray[$deptName] = thing($newArray[$deptName], $dept);
        }
    }
}
        

echo "<pre>";
print_r($newArray);
echo "</pre>";