2013-05-26 29 views
-1

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

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

} 
+0

我讨厌问,但'$ result'初始化了吗? –

+0

itemId看起来像主键。如果是这样的话,你不需要第一个'while'或者数组。 – creack

+0

'$ i> 12'条件永远不会被满足。我想你想用'$ i <12'或'$ i <= 12'。 – Powerslave

回答

7

您的for循环有错误。你有

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

,但它应该是

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

该死的好眼睛+1,我没有看到它给了500年。 –

+0

哈哈!我正在输入这个完全相同的东西! –

+0

@L_Holcombe +1 :) – Powerslave

0

有一个在逻辑一个明显的缺陷。您尝试获取$ 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; 
} 
1

这不是直接回答你的问题,但有没有被提到几件事情的关注这样你查询和处理数据:

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

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

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

,就可以计算出在数据库方面,整个事情像这样

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列为整数类型