PHP数组for循环


PHP array for loop

我想显示for循环计算的数组值$result[]。但是,页面上什么也没有显示。下面的代码有什么问题吗?

$sql= "SELECT * FROM items where itemID =3 ";
$result1= mysql_query($sql) or die (mysql_error());
while ($row= mysql_fetch_array($result1)){
    $quantity[] = $row ['quantity'];
    $month[] = $row ['month'];
}
$alpha = 0.3;
for($i = 1; $i > 12; $i++){
    $result[$i] = ($quantity[$i] - $result[$i-1]) * $alpha + $result[$i-1];
}
foreach ($result as $key => $value ){
 echo "$value";
}

for循环出错。你有

for($i = 1; $i > 12; $i++)

但应该是

for($i = 1; $i < 12; $i++)

这不是你的问题的直接答案,但是有一些事情没有被提及,涉及你查询和处理数据的方式:

  1. 您的SELECT报表没有指定特定的顺序。由于没有保存记录的顺序,您可能会得到顺序不正确的记录并得到无效的计算。使用ORDER BY(例如ORDER BY month)或使用月份值并从数组中提取上个月的值(如果这是你在代码中所做的)。

  2. 您当前的代码依赖于这样一个事实:来自DB的结果集将包含(至少)12条记录。如果由于某种原因,它将产生更少的记录,您的for循环将停止。

  3. 从问题中的信息来看,这是不确定的,但看起来你可能需要一年的查询,除非表中只包含一年的记录。

现在,您可以使用如下查询在DB端计算整个内容

SELECT i.month, 
       COALESCE((i.quantity - p.quantity) * 0.3 + p.quantity, 0) value
  FROM items i LEFT JOIN items p
    ON i.itemID = p.itemID
   AND i.`year` = p.`year`
   AND i.month = p.month + 1
 WHERE i.itemID = 3
   AND i.`year` = 2013
 ORDER BY month

SQLFiddle

这是假设(我不确定)你实际上需要阅读上个月的数量值为您的计算和month列是整数类型

逻辑上有一个明显的缺陷。你试着从$quantity中得到$i索引。但是,您不能确定$quantity是否有此索引。假设itemId不是主键,我将这样做:

$sql = "SELECT * FROM `items` WHERE `itemID` = 3";
$result1= mysql_query($sql) or die (mysql_error());
while ($row= mysql_fetch_assoc($result1)){    
    $quantity[] = $row ['quantity'];
}
$alpha = 0.3;
$i = 1
foreach ($quantity as $elem) {
    if ($i >= 12)
      break;
    $result[$i] = ($elem - $result[$i-1]) * $alpha + $result[$i-1]; 
    $i++
}
foreach ($result as $value ){
 echo $value;
}