PHP循环计算,获取以前的值并添加当前值

时间:2017-12-05 15:49:57

标签: php

我正在尝试为某些计算获取当前循环的先前值。 作为起点,我们来描述代码是什么。

  • 外循环生成月份名称
  • $ forecast_correction是一个用于纠正某些值的循环

我们的想法是对具有基本成本和月份默认百分比的月份进行预测/预测。

这是循环的逻辑。 1月是开始月份,我们在那里设置基数$price,但下个月(2月)应该是1月* $default_percent, 三月应该是二月* $default_percent等。所有都应该包括更正。

当涉及到更正时,我们得到了两个变量

$percentage = (!empty($modified_percentage)) ? $modified_percentage : $default_percent;
$month_cost = $price * $percentage + $correction_cost;
如果外循环月($ m)等于校正数组$ month,则

Percentage可以更改,否则为默认值。 Month cost是基本计算。

  +----------+---------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+------------+------------+
  |   jan    |      feb      |    mar     |    apr     |    may     |    june    |    july     |    augu     |    sept     |     oct     |    nov     |    dece    |
  +----------+---------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+------------+------------+
  | 41290.65 | 41290.65*1.03 | feb * 1.03 | mar * 1.03 | apr * 1.03 | may * 1.03 | june * 1.03 | july * 1.03 | augu * 1.03 | sept * 1.03 | oct * 1.03 | nov * 1.03 |
  +----------+---------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+------------+------------+

代码段

<?PHP
$forecast_correction = array(
    array(
        'month' => '2',
        'add' => 150.00,
        'substract' => 0.00,
        'final' => 150.00,
        'percent' => 1.02
    ),  
    array(
        'month' => '3',
        'add' => 0.00,
        'substract' => 250.00,
        'final' => -250.00,
        'percent' => NULL
    ),  
    array(
        'month' => '4',
        'add' => 0.00,
        'substract' => 0.00,
        'final' => 0.00,
        'percent' => 0.15
    )   
);  
$price               = 41290.65;
$default_percent     = 1.03;

for ($m = 1; $m <= 12; ++$m) {
    $correction_cost     = 0;
    $modified_percentage = null;
    foreach ($forecast_correction as $correction) {

        if ($m == $correction['month']) {
            $correction_cost = $correction['final'];
            if (!empty($correction['percent'])) {
                $modified_percentage = $correction['percent'];
            }   
        }   
    }   
    ;   
    $percentage = (!empty($modified_percentage)) ? $modified_percentage : $default_percent;
    $month_cost = $price * $percentage + $correction_cost;

    echo date('F', mktime(0, 0, 0, $m, 1)) . " :: $month_cost :: " . $correction_cost . "  :: " . $percentage . "% \n";
}   

问题和所需的输出

问题:如何在此特定示例中实现2月= 1月*百分比逻辑,以便使用更正数组正确计算所有结果。

所需的输出(可以是纯文本,数组等等。)

Month : Cost

如果您需要进一步澄清,请不要犹豫,我很坚持这一点。

MCVE沙箱

http://sandbox.onlinephpfunctions.com/code/0c705ab721c6160813b98d133d8a1b7ff876cdca

1 个答案:

答案 0 :(得分:2)

我认为通过一些小修改,您的示例代码将完成您想要的任务。

我将$ price重命名为$ base_month_cost,最初定义它:

$base_month_cost     = 41290.65;

用于在外循环中计算$ month_cost:

$month_cost = $base_month_cost * $percentage + $correction_cost;

然后,在计算$ month_cost的行(上面)之后,我添加了一个新行来重新定义$ base_month_cost:

$base_month_cost = $month_cost;// set here for use in next iteration

这意味着每个连续月份的$ month_cost基于上个月的$ month_cost。

您还希望确保在计算1月份的$ month_cost时不应用百分比增加。我可以想到两个解决这个问题的方法:

  1. 您可以将1月份添加到$ forecast_correction数组中,其中'percent'值为1(因此初始$ base_month_cost会乘以1,并且不会更改。)
  2. 您可以在for循环中添加一些额外的逻辑,如果$ m == 1则将$百分比设置为1,或者为$ month_cost执行不同的计算,如果$ m == 1则忽略$ percentage。
  3. 我认为第一种方法更清洁。

    希望这就是你要找的东西。当我通过我的修改运行它进行测试时,我注意到4月份的百分比值在您的示例中为0.15,这显着降低了$ month_cost(以及连续几个月)。