While循环中的Sum变量,基于IF语句的结果

时间:2012-06-10 13:46:58

标签: php variables if-statement while-loop sum

又得到了一个问题......

我在循环工作时有以下内容:

    $activityreport = "SELECT $fieldname FROM $table WHERE QuoteID=$quoteid";

    $activity = mysql_query($activityreport) or die(mysql_error());

    while($data = mysql_fetch_array($activity)){

    $amount = $data[$fieldname];

    if($amount>0 && $table != 'OptionFees'){ 
        $amountc = abs($amount);
        }
        elseif($amount>0 && $table == 'OptionFees'){
        $amountd = abs($amount);
        }
        elseif($amount<0 && $table == 'OptionFees'){
            $amountc = abs($amount);
        }
        else{
            $amountd = abs($amount);
        }

    $totald = $totald + $amountd;
    $totalc = $totalc + $amountc;

    echo "<tr><td class='description'>$table</td>
            <td class='debit'>".money_format('%(#10n', $amountd)."</td>
            <td class='credit'>".money_format('%(#10n', $amountc)."</td></tr>";

    }

我的问题是,$ totald和$ totalc最后只是结果来自上一轮的while循环,而不是所有行程的总和。

如果不是IF语句分解$ data [$ fieldname],我可以使用$ total + = $ data [$ fieldname] ,但细分很重要。正如您所看到的,我正在使用它来创建一个表格,该表格将显示GL帐户及其各自的日记帐分录的借方和贷方。每个帐户的行显示完美,但总计只显示最后一行的重复。

非常非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

在开始循环之前初始化这些变量:

$activityreport = "SELECT $fieldname FROM $table WHERE QuoteID=$quoteid";

$activity = mysql_query($activityreport) or die(mysql_error());

$totald = 0;
$totalc = 0;

while($data = mysql_fetch_array($activity)){

$amount = $data[$fieldname];
$amountc = 0;
$amountd = 0;

if($amount>0 && $table != 'OptionFees'){ 
    $amountc = abs($amount);
    }
    elseif($amount>0 && $table == 'OptionFees'){
    $amountd = abs($amount);
    }
    elseif($amount<0 && $table == 'OptionFees'){
        $amountc = abs($amount);
    }
    else{
        $amountd = abs($amount);
    }

$totald = $totald + $amountd;
$totalc = $totalc + $amountc;

echo "<tr><td class='description'>$table</td>
        <td class='debit'>".money_format('%(#10n', $amountd)."</td>
        <td class='credit'>".money_format('%(#10n', $amountc)."</td></tr>";

}