【问题标题】:different result by 'while' and 'foreach''while' 和 'foreach' 的不同结果
【发布时间】:2014-06-14 04:01:01
【问题描述】:

当使用“while”循环遍历数组时,我得到了很好的结果,但是当我对 foreach 做同样的事情时,我得到的结果就不一样了。 SELECT 语句返回两行:
731
第732章

$data = $mysqli->query("SELECT ...");


while($item = $data->fetch_array())
{
echo $item[0]."<br />";
}

返回:
731
732

foreach ($data->fetch_array() as $item)
{
echo $item."<br />";
}

返回:
731
731

我在使用“foreach”的第二种方法中做错了什么? 非常感谢!

【问题讨论】:

  • Foreach 需要一个数组,而需要一个表达式
  • 我认为你应该这样做while($item = $data-&gt;fetch())
  • 如果您的版本支持它,您可以使用foreach($data-&gt;fetch_all() as $item)
  • 我不明白你怎么会问这样的问题,真的很难在google上搜索吗?您可以在 30 秒内找到答案

标签: php foreach while-loop


【解决方案1】:

这是因为数组代表返回结果集中的一行。在您的foreach 循环中,$data-&gt;fetch_array() 只会执行一次,并且只会包含一行(即 731)。您必须再次拨打fetch_array() 才能获得下一条记录。您必须先使用while 循环来获取记录并将它们推送到数组中,然后然后使用foreach

$resultset = array();
while($item = $data->fetch_array()) {
    $resultset[] = $item;
}

foreach ($resultset as $row) {
    echo $row;
}

【讨论】:

    【解决方案2】:

    每次调用fetch_array 方法时,它都会从数据库中返回一行作为包含字段值的数组。
    所以它不会返回所有 rows,而是返回 one 行中的所有 fields

    当你再次调用它时,它会返回数组,其中fields第二行

    当查询中的所有行都返回时,fetch_array() 返回FALSE。在 while 循环中,$row 变量变为false 并且lopp 停止。

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 2019-11-11
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 2016-07-22
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多