【问题标题】:Foreach loop vs while loop resultsForeach 循环与 while 循环结果
【发布时间】:2014-12-05 17:06:47
【问题描述】:

我有点进退两难,在 PHP 中,foreach 循环和 while 循环在这种情况下似乎都做同样的事情:

foreach($execute->result as $item){
    echo $item['user_pass'].'<br />';
}

while($row = mysqli_fetch_assoc($execute->result)){
    echo $row['user_pass'].'<br />';
}

我的问题是有什么真正的区别...?什么时候使用一个比另一个更好,或者两者都可以使用......?这两者中的任何一个是否会给您带来更大的灵活性...?

【问题讨论】:

  • 不确定,我总是使用 while 循环进行数据库选择
  • 我不认为这个问题与发布的问题重复。
  • @Qualcuno 实际上,你是对的。更像是stackoverflow.com/questions/3304885/… 的副本,您在回答中提到了(Traversable)。如果 OP 希望重新开放,他/她可以提出异议。
  • @Fred-ii- 和那个更相似,但我认为它仍然有一些独特性,因为它在谈论一个特定的类。
  • 哇,伙计们,我的问题是这些循环在给定情况下的行为......这里的关键病房和我的问题可能与其他人相似,但在某种程度上是独一无二的。但是谢谢你们试图回答我的问题:)

标签: php sql foreach while-loop


【解决方案1】:

在这种情况下,它们是完全等价的。 mysqli_result 实现了 Traversable 接口(如本文所述:http://www.php.net/mysqli_result),因此也可以使用 foreach 循环对其进行迭代。

我想,在内部,对 mysqli_result 对象调用 foreach 也会执行对 mysqli_fetch_assoc 的调用。

我认为使用第一种方法或第二种方法没有任何区别;但是,对我来说,第一个看起来更漂亮并且“更多 PHP5”!
说到灵活性,第一个当然也更灵活,因为您可以将该代码用于实现Traversable 而不仅仅是mysqli_result 的任何对象。

【讨论】:

  • 从哲学上讲,迭代列表元素然后测试我们是否在列表末尾然后迭代到下一个元素似乎更干净,所以我同意。
【解决方案2】:

我发现了这个:

for vs foreach vs while which is faster for iterating through arrays in php

答案表明速度差异是如此之小,以至于您使用哪种几乎无关紧要。

我喜欢使用 foreach 循环来迭代返回的信息,因为我可以访问键和值,这取决于所需的用途。

$returned = array(array("userName" => "Tim"),array("userName" => "Bob"), array("userName" => "Guy"));

foreach($returned as $L1)
{
  foreach($L1 as $L2 => $val)
  {
      if($L2 === "userName")
      {

         echo 'Hello: ' . $val . "<br />";

      }

  }

}

我想这取决于您需要什么值、需要多少控制以及在哪里需要。

【讨论】:

  • 这与whileeach有何不同
  • 我只是在说明我喜欢使用什么,并提供另一篇关于速度的帖子。不要养牛,哈哈。
  • 一开始我以为链接很有用,但是计时结果可能不适用于这种情况:$result 不是数组,它是一个可以理解mysqli_fetch_assoc() 的对象。时间可能由每次迭代的 fetch_assoc 支配,而不是任何循环开销。
猜你喜欢
  • 1970-01-01
  • 2021-09-24
  • 2011-08-06
  • 2013-10-01
  • 2016-03-14
  • 2012-10-02
  • 2014-10-19
  • 2014-06-20
  • 2015-07-03
相关资源
最近更新 更多