【问题标题】:Why "while" loop is always used to iterate through mysql_fecth_array() function result?为什么总是使用“while”循环来遍历 mysql_fecth_array() 函数结果?
【发布时间】:2015-07-15 19:30:34
【问题描述】:

为什么人们不使用 forforeachdo..while() 以及为什么在 while 中省略增量计数器?

`<?php  while ( $fa = mysql_fetch_array($sel1) )//uesd mysql_fetch_array() function in while loop
    { 
          echo  $fa['cid'];//display client id 
    }

// w3school 中的 Syntax give to 使用 this

 $x = 1; 

 while($x <= 5) {
     echo "The number is: $x";
     $x++;
 }  
?>//show why we don't used mysql_fecth_array() like this 

【问题讨论】:

标签: php mysql loops while-loop


【解决方案1】:

这是一种过时的信息。在一种方式中,您提出了一个刚刚被社区接受的问题。 当我有信息可以显示时,更好地理解......做某事。您通常不会说 foreach of these items ... 做某事,尽管您可以。然而,另一个问题是 mysql_fetch_array 返回FALSE if there are no more rows。这在 foreach 中不起作用,因为它不是数组。 A for 也将失败,因为要检查 a for 的完成,您必须到达某个点并结束。FALSE 不是有效的检查点(我曾经尝试或使用过)。


@Michael Berkowski 补充说:

从 PHP 5.4+ 开始,mysqli_result 类确实支持迭代器,这意味着您可以执行$result = mysqli_query(...); 和随后的foreach ($result as $row) {...},它将获取关联数组

虽然这不是最常用的形式这就是我们提出问题的原因


你可以do...while 但你为什么会。您没有从 fetch 数组中获得所需的大部分信息。

虽然被接受并且通常更好。如果 mysql 以任何方式失败,则不会失败并且有回退。

最后...不要再使用 mysql_* 了。切换到 mysqli_*。更安全..更智能..更好。

【讨论】:

  • 请注意,在 PHP 5.4+ 中,the mysqli_result class 确实支持Iterator,这意味着您可以执行$result = mysqli_query(...); 和随后的foreach ($result as $row) {...},它将获取关联数组。因此,while 循环可以在更新的 PHP/mysqli 中替换为 foreach。与 PDO 相同。
  • 谢谢!我其实并不知道。所以我把它加在了最好读的地方!
【解决方案2】:

您可以完美地使用任何其他循环来获取查询结果。
人们大多使用while循环的原因是因为它是最简单的方法。这样做的原因是,如果没有任何额外的代码行,我们不知道返回了多少行,因此我们不知道必须迭代多少次才能从结果中获取所有行。
每次@ 987654321@ 被执行,它给我们下一行数据,当它用完行时它返回 false。所以使用 while 循环我们基本上说: 当还有一个新行时,我们从中获取数据,获取下一行,当我们用完行时,我们停止。

例如,您可以使用 for 循环完成相同的操作。这并不是那么简单。

使用for循环迭代mysql_fetch_array():

$r = mysql_query($query);
$num_rows = mysql_num_rows($r);

for($i = 0; $i < $num_rows; $i++) {
    echo mysql_fetch_array()[$id];
}

另一种选择是在 for 循环中放置一个 if 语句来检查是否有任何新行,如果没有,我们可以退出 for 循环。
使用 while 循环,我们可以将循环和 if 语句结合起来。

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 2020-05-09
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2012-02-05
    相关资源
    最近更新 更多