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