PHP数组for循环

时间:2013-05-26 04:22:54

标签: php

我想从$result[]循环计算中显示数组值for。但是,它在页面上没有显示任何内容。以下代码有什么问题吗?

$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";

}

3 个答案:

答案 0 :(得分:7)

你的for循环有错误。

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

但它应该是

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

答案 1 :(得分:1)

这不是您问题的直接答案,但很少有与您查询和处理数据的方式有关的事情:

  1. 您的SELECT语句未指定特定顺序。由于未保留记录顺序,您可以获得正确顺序的记录并获得无效计算。使用ORDER BY(例如ORDER BY month)或使用月份值并从数组中精确提取上个月的值(如果它是您在代码中执行的操作)。

    < / LI>
  2. 您当前的代码依赖于DB的结果集将包含(至少)12条记录的事实。如果由于某种原因它会产生较少的记录,你的for循环将会制动。

  3. 根据问题中的信息不确定,但看起来您的查询可能需要一年,除非该表仅包含一年的记录。

  4. 现在,您可以使用类似

    的查询计算数据库端的整个内容
    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列是整数类型

答案 2 :(得分:0)

逻辑上有一个明显的缺陷。你试图获得$ i索引形式$ quantity。但是,您无法确定$ 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;
}