PHP:在 for 循环中获取计算问题



对不起这个愚蠢的问题。 我想花费 25 个积分的可用积分是 30(10,10,10(。但是在下面的示例代码中,最终金额是负 (-( 5 值而不是 5。您能否检查我的代码,实际输出和我的预期结果:

法典:

<?php
$content_credit = 25;
$data = array(10,10,10);
$used_credit = 0;
for($i=0; $i<count($data); $i++){
if($content_credit > $used_credit){
$used_credit += $data[$i];
echo "Point: " . $data[$i];
echo " Used: " . $used_credit;
echo " Remaining: " . ($content_credit - $used_credit);
}
echo "<br>";
}

实际结果:

Point: 10 Used: 10 Remaining: 15
Point: 10 Used: 20 Remaining: 5
Point: 10 Used: 30 Remaining: -5

预期成果:

Point: 10 Used: 10 Remaining: 15
Point: 10 Used: 20 Remaining: 5
Point: 10 Used: 25 Remaining: 5

第一次迭代中的$content_credit变为 10,然后在第二次迭代中由于+=而变为 20

。因此 25 - 10 - 20 = -5

<?php
$credit_to_spend = 25;
$available_credit = array(10,10,10);
$used_credit = 0;
for( $i=0; $i<count($available_credit); $i++ ){
if( $credit_to_spend > $used_credit ){
$required = ($credit_to_spend - $used_credit);
$used_credit += ($required < $available_credit[$i]) ? $required : $available_credit[$i];
$remaining = (($required < $available_credit[$i]) ? ($available_credit[$i] - $required): ($credit_to_spend - $used_credit));
echo "Point: " . $available_credit[$i] 
. " Used: " . $used_credit 
. " Remaining: " . $remaining;
}
echo "<br>";
}

您可能正在寻找类似以下内容的内容:

<?php
$content_credit = 25;
$data = array(10,10,10);
$total = array_sum($data);
$used_credit = 0;
for($i=0; $i<count($data); $i++){
if($content_credit > $used_credit){
$used_credit += $data[$i];
echo "Point: " . $data[$i];
echo " Used: " . $used_credit;
$remaining = $used_credit > $content_credit ? $total - $content_credit :  $total - $used_credit;
echo " Remaining: " . $remaining;
}
echo "<br>";
}

您需要知道您总共有多少信用额度来计算剩余金额。

要获得实际使用的信用额度,只需知道$used_credit$content_credit之间的哪个值较小就足够了。因此,您可以使用min()来获取值。

echo " Used: " . min($used_credit, $content_credit);

类似地max()可以将$remaining替换为三元运算符结果的值或简单的计算$total - $actual_used

echo " Remaining: " . max($total - $content_credit,  $total - $used_credit);

最新更新