可能的PHP Bug?使用简单减法进行数组赋值

时间:2014-10-23 20:52:46

标签: php arrays

我偶然发现一个非常令人沮丧的问题,其中以下两行代码(在几个月内循环迭代)给出不同的结果(最后一行是错误的)

SO ..这一行给出了一个好结果

echo $product[$pData['product_sku']][$rollMonthKey] - $rollingSubtractionTotal;
Outputs:
Aug 2014: -218
Sep 2014: 50
Oct 2014: 268
Nov 2014: 436
Dec 2014: 554

但是这个没有......我需要将值存储如下,而不是回显它(稍后保存到xlsx文件中)

$product[$pData['product_sku']][$rollMonthKey] -= $rollingSubtractionTotal;
echo $product[$pData['product_sku']][$rollMonthKey];
Outputs:
Aug 2014: -218
Sep 2014: 50
Oct 2014: 50
Nov 2014: 50
Dec 2014: 50

有人可以说清楚吗? (这不是常见的PHP行为)

以下所有循环/代码......

  foreach ($product as $sku => $pData) {


  // forecast/sales deduction part
  for ($m = 1; $m <= 12; $m++) {

    if($m >= $thismonth){

      $rollMonthKey = date('F Y',strtotime($thisyear.'-'.$m.'-01'));

      $rollingSubtractionTotal = 0;

      for($rm=0;$rm<=$m-$thismonth;$rm++){
        $rollMonthKeyCalc = date('F Y',strtotime($thisyear.'-'.$m.'-01 -'.($rm+1).' Month'));
        $rollingSubtractionTotal += $product[$pData['product_sku']][$rollMonthKeyCalc];
      }

      $product[$pData['product_sku']][$rollMonthKey] -= $rollingSubtractionTotal;

      echo '<br />';

    }

  }
  exit;

2 个答案:

答案 0 :(得分:1)

$rollingSubtractionTotal = 50;

8月之后,你告诉php你$product[$pData['product_sku']][$rollMonthKey];的值应该= 50;

在你的第一个陈述中,你从$product[$pData['product_sku']][$rollMonthKey];减去50 在你的第二个你分配50,它不能减少,因为你的键值没有固定。

答案 1 :(得分:0)

我的问题的解决方案是使用foreach循环的值,而不是使用主数据数组复杂的东西...修复只需要2行更改...

      for($rm=0;$rm<=$m-$thismonth;$rm++){
        $rollMonthKeyCalc = date('F Y',strtotime($thisyear.'-'.$m.'-01 -'.($rm+1).' Month'));

        /* changed line */
        $rollingSubtractionTotal += $pData[$rollMonthKeyCalc];
      }

      /* changed line */
      $product[$sku][$rollMonthKey] -= $rollingSubtractionTotal;