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