如何解决用 3 PHP
希望你做得很好! 请有想法的评论按3分组,然后第4个接收一个月内分组的值。 这是我的数据:
$salaries =
[
[
'month'=>'January','salary'=>200
],[
'month'=>'Februray','salary'=>300
],[
'month'=>'march','salary'=>400
],[
'month'=>'April','salary'=>500
],[
'month'=>'May','salary'=>600
],[
'month'=>'June','salary'=>700
],[
'month'=>'July','salary'=>800
],[
'month'=>'August','salary'=>900
],[
'month'=>'September','salary'=>1000
],[
'month'=>'October','salary'=>1100
],[
'month'=>'November','salary'=>130
],[
'month'=>'December','salary'=>1200
]
];
我试过这个代码:Sum Value in foreach loop every 3 time looping
但我不知道用总和指定第 4 个,以便在我的视图中循环
如果可能,我想要这个:
Array
(
[0] =>
[
'month'=>'April'
'sum'=900
]
[1] =>
[
'month'=>'other month'
'sum'=1800
]
[2] =>
[
'month'=>'other month'
'sum'=2700
]
[3] =>
[
'month'=>'other month'
'sum'=2430
]
)
我试试这个代码:
$groupSum = [];
foreach (array_chunk($salaries,3) as $key => $value) {
$groupSum[] = array_reduce($value,function ($sum,$item) {
$sum += $item['salary']; return $sum;
});
}
结果是:
Array (
[0] => 900
[1] => 1800
[2] => 2700
[3] => 2430
)
解决方法
一个(非常)基本的解决方案(对于我的测试,我修复了二月月份名称的拼写错误):
function getNextMonth($month) {
$months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
$pos = array_search($month,$months);
if ($pos === false) {
throw new Exception('Invalid month');
}
if ($pos == 11) {
return 'January';
// should return also year + 1
}
return $months[$pos+1];
}
$i = 1;
$trimestreSum = 0;
$trimestres = [];
foreach($salaries as $month) {
$trimestreSum += $month['salary'];
if ($i % 3 == 0) {
array_push($trimestres,[
'month' => getNextMonth($month['month']),'sum' => $trimestreSum,]);
$i = 0;
$trimestreSum = 0;
}
$i++;
}
print_r($trimestres);
结果是
Array
(
[0] => Array
(
[month] => April
[sum] => 900
)
[1] => Array
(
[month] => July
[sum] => 1800
)
[2] => Array
(
[month] => October
[sum] => 2700
)
[3] => Array
(
[month] => January
[sum] => 2430
)
)
getNextMonth 可能是您需要添加到自己代码中的唯一一段代码:)
很确定有更短(更优雅)的解决方案,但无论如何希望能有所帮助。
,更新:@Armage's answer 似乎可以解决问题,但只是为了好玩:
Column1 | Column2 | Column3
--------+---------+--------
A | X | Y
A | X | Y
当然,这假定有效数据、基于索引的 $result = [];
// I guess $iMax can just be 12,but I don't know
for($nextTriI = 3,$iMax = count($salaries); $nextTriI < $iMax; $nextTriI += 3) {
$triSum = 0;
for($m = $nextTriI - 3; $m < $nextTriI; $m++) {
$triSum += $salaries[$m]['salary'];
}
$result[] = [
'month' => $salaris[$nextTriI]['month'],'sum' => $triSum
];
}
print_r($result);
等
后代的旧答案:
我不确定这是否是您想要的,这也不是最好的方法,但也许:
$salaries
,
试试这个
$groups = [];
$fourth = $salaries[3]['month'];
foreach(array_chunk($salaries,3) as $salary) {
$sum = 0;
$month = 'other month';
foreach($salary as $k => $sal) {
$sum += $sal['salary'];
if($fourth == $sal['month']) {
$month = $sal['month'];
}
}
$groups[] = [
'month' => $month,'sum' => $sum
];
}
结果
array(4) {
[0]=>
array(2) {
["month"]=>
string(11) "other month"
["sum"]=>
int(900)
}
[1]=>
array(2) {
["month"]=>
string(5) "April"
["sum"]=>
int(1800)
}
[2]=>
array(2) {
["month"]=>
string(11) "other month"
["sum"]=>
int(2700)
}
[3]=>
array(2) {
["month"]=>
string(11) "other month"
["sum"]=>
int(2430)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。