.Foreach显示正确的迭代,但在每个迭代中重复相同的值

时间:2013-07-22 09:45:58

标签: php foreach iteration

我在PHP中创建财务计算,要求我从数据库中提取数据,应用各种计算来确定月数和每月支付的保险费,然后回显每个月的结果。

正在发生的是foreach返回正确的行数,但每次迭代重复最后一行,因此所有行都相同。

我远离一个php fundi,花了3天时间通过论坛,手册等进行搜索,但却未能找到问题。一些可能有答案的文章完全超出了我的想法。

对此的任何帮助都会非常感激!!

代码:

$grosstotal =   array(); 

for ($i=1; $i<=$totaldiff; $i++) 
{

if ($i == '1') { 
$start = $docraw; 
}else {
$realdoc = strtotime(date('Y-m-d', strtotime($docraw)));
$start = $realdoc; 
}

$days_between = round(abs($end - $start) / 86400); 
$contribution_core = round(abs($days_between) / 30.42); 
$mca = -floor($contribution_core/12);
$mcb = ($escalation+100)/100;
$months_contribution = $current_premium*(pow($mcb,$mca)); 

$grosstotal[] = $months_contribution;
}

foreach($grosstotal as $months_contribution) {
echo  $months_contribution . '<br>';
  $gtotal = array_sum($grosstotal);
} 

$ totaldiff在我的测试用例中= 38,因此结果应该是38个月(行)返回,每个都显示该月的值。我最后一个月的$ months_contribution是4000.第一行根本没有显示。每12个月应该反映不同的金额,因为每年的保费都会上涨。在这种情况下,它与第一行完全没有变化。

当我在echo语句中添加$ i时,它在每一行显示为38,我认为这表示$ i没有递增,而是纯粹使用它的最终值。

我得到的结果是:

66.4009861824<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>
3005.25920361<br>

结果应该是: 3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,005.26
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,305.79
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
3,636.36
4,000.00
4,000.00

1 个答案:

答案 0 :(得分:0)

可能不是解决方案,而是两件事:

  • 它显示38总是因为你在foreach中的回声是在关闭}
  • 之后
  • 为什么在if($ i =='1'){?
  • 时使用'1'代替1?