Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环的PHP数组_Php - Fatal编程技术网

循环的PHP数组

循环的PHP数组,php,Php,我想显示循环计算的中的数组值$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[] = $r

我想显示循环计算的
中的数组值
$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++)
($i=1;$i<12;$i++)的
逻辑中有一个明显的缺陷。您尝试从$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;
}

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

  • 您的
    SELECT
    语句没有指定特定顺序。由于不保留记录的顺序,您可以使记录的顺序不正确,从而得到无效的计算。使用
    orderby
    (例如
    orderby month
    )或使用月份值并从数组中精确提取上个月的值(如果是您在代码中所做的)

  • 您当前的代码依赖于这样一个事实,即来自DB的resultset将包含(至少)12条记录。如果出于某种原因,它将生成较少的记录,则
  • 循环将停止

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

  • 现在,您可以使用这样的查询在DB端计算整个过程

    选择i.month,
    合并((i.数量-p.数量)*0.3+p.数量,0)值
    从我离开的项目加入项目p
    关于i.itemID=p.itemID
    i.`year`=p.`year`
    i.month=p.month+1
    其中i.itemID=3
    和i.‘年份`=2013年
    按月订购
    


    这是假设(我不确定)您实际上需要读取上个月的数量值进行计算,并且
    month
    列是整数类型的

    我不想问,但是
    $result
    是否已初始化?itemId看起来像主键。如果是这种情况,则不需要第一个
    while
    或数组。永远不满足
    $i>12
    条件。我认为您应该使用
    $I<12
    $I,在这种情况下,我认为您应该使用mysql\u fetch\u assoc,而不是mysql\u fetch\u数组。数据库中记录的排序器不保留。您如何确保您的选择以正确的顺序为您提供了月份,并且您的计算将有效?我知道你需要怎么使用
    orderby
    Haha!我在打同样的东西!通读代码,但没有把它捡起来。我只是在滚动过去,并没有真正看的时候才看到它。当我们在这里的时候,让我们学习一些东西。当PHP看到这样的情况时,它会做什么?厌恶地耸耸肩然后继续?生成警告?@L_Holcombe虽然它是一个不正确的循环构造函数,但根据PHP的标准,它基本上是有效的,因此它会将
    $i
    设置为
    1
    的值,测试
    $i>12
    ,得出结论认为它不是,并悄悄地绕过for循环。