【问题标题】:While loop inside foreach loop not proceeding to foreach loopforeach 循环内的 while 循环不会继续进行 foreach 循环
【发布时间】:2016-05-27 23:32:56
【问题描述】:

我正在使用 while 循环和 array_push 将日期从 query 存储到数组中。

$h = array();
$j = array();

while ($g = mysql_fetch_array($f)) {
   $date = new DateTime($g['selected_date']);
   echo "<th>" . date_format($date, 'd') . "</th>";
   array_push($h, $date);
   array_push($j, $g['selected_date']);
}

我认为打印该数组返回到这很好。

Array (
   [0] => 2016-05-23
   [1] => 2016-05-24
   [2] => 2016-05-25
   [3] => 2016-05-26
   [4] => 2016-05-27
   [5] => 2016-05-28
)

我尝试这样使用:

$a = mysql_query("select * from center") or die(mysql_error());
$arr = array();

foreach($j as $k) {
    while ($b = mysql_fetch_array($a)) {
        $l = "select sum(yid.center_inventory) as 'total' 
              from yl_inventory_details as yid
              left join yl_inventory as yi 
                  on yi.yl_inventory_no = yid.yl_inventory_no
              where yid.center_no = '$b[center_no]'
              and yi.date = '$k'";
        $c = mysql_query("$l") or die(mysql_error());
        $d = mysql_fetch_array($c);
        echo "<tr><td>".$b['center']."</td><td>".$d['total']."</td></tr>";              
    }
}

但它只取第一个值2016-05-23。 while 循环似乎没有进行到下一个 foreach 值。我该如何解决这个问题?

【问题讨论】:

  • 在做任何其他事情之前,请摆脱 mysql_ 函数调用。这些功能现在已被弃用很长时间。使用mysqli_ 或 PDO。
  • 把你的 foreach 循环放到你的 while 循环中,你就成功了

标签: php mysql


【解决方案1】:

当您使用mysql_fetch_array 时,它会转移到结果中的下一行。一旦你到达最后一个结果,它就会开始返回FALSE

要使您的代码正常工作,您所要做的就是反过来交换循环。

例如

$a = mysql_query("select * from center") or die(mysql_error());
$arr = array();
while ($b = mysql_fetch_array($a))
{
    foreach($j as $k)
    {
            $l = "select
                    sum(yid.center_inventory) as total 
                from yl_inventory_details as yid
                left join yl_inventory as yi on yi.yl_inventory_no = yid.yl_inventory_no
                where yid.center_no = {$b['center_no']} and yi.date = {$k}";
            $c = mysql_query($l) or die(mysql_error());
            $d = mysql_fetch_array($c);
            echo
            "<tr>
                <td>{$b['center']}</td>
                <td>{$d['total']}</td>
            </tr>";             
    }
}

【讨论】:

  • 并将引号添加到'$b[center_no]' :)
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 2013-10-01
相关资源
最近更新 更多