for loop vs while loop vs foreach循环PHP

Tec*_*hie 19 php performance loops control-structure nested-loops

第一关,我是PHP的新手.我一直在使用for循环,while循环,foreach循环脚本.我想知道

  • 哪一个更适合表现?
  • 选择循环的标准是什么?
  • 当我们在另一个循环中循环时应该使用哪个?

我坚持的代码想知道要使用哪个循环.

for($i=0;$i<count($all);$i++)
{
 //do some tasks here
 for($j=0;$j<count($rows);$j++)
 {
  //do some other tasks here 
 }
}
Run Code Online (Sandbox Code Playgroud)

很明显我可以用while编写上面的代码.希望有人能帮助我找出哪个循环应该更好用.

Pek*_*ica 34

哪一个更适合表现?

没关系.

选择循环的标准是什么?

如果您只需要遍历对象或数组的所有元素,请使用foreach.您需要的 案例for包括

  • 当您明确需要使用数字索引时,例如:
  • 当您需要在迭代中使用上一个或下一个元素时
  • 当您需要在迭代期间更改计数器时

foreach更方便,因为它不需要你设置计数,并且可以通过任何类型的成员 - 无论是对象属性还是关联数组元素(for不会捕获).通常最好的可读性.

当我们在另一个循环中循环时应该使用哪个?

两者都很好; 在您的演示案例中,这foreach是最简单的方法.

  • @Francis是的.另外,即使在10k元素上运行,性能差异也在*微秒*(参见Jason的PHPBench链接).差异真的完全没有意义. (2认同)
  • 好吧,foreach循环实际上在内存中创建了一个变量的副本,以便迭代它,而你直接用for循环迭代原始变量.除非您处理数百万个元素,否则可以忽略不计.对于令人敬畏的答案+1:P (2认同)

Rei*_*ica 13

哪一个更适合表现?

谁在乎?这不会很重要.永远.如果这些微小的优化很重要,那么你就不会使用PHP.

选择循环的标准是什么?

选择一个最容易阅读的,最不可能在将来导致错误.当你循环整数时,for循环很棒.当你像一个数组一样循环一个集合时,foreach很棒,当你需要循环直到你"完成"时,while这很棒.

这可能也取决于样式规则(例如,在Python中,你几乎总是想要使用foreach循环,因为这是"在Python中完成的方式").我不确定PHP的标准是什么.

当我们在另一个循环中循环时应该使用哪个?

无论哪种循环类型最有意义(参见上面的答案).

在你的代码中,for循环对我来说似乎很自然,因为你有一个定义的开始和停止索引.


小智 7

查看http://www.phpbench.com/以获取一些PHP基准测试的参考.

for循环通常非常快.不要在for中包含你的计数($ rows)或count($ all),在外面这样做:

$count_all = count($all);
for($i=0;$i<$count_all;$i++)
{
    // Code here
}
Run Code Online (Sandbox Code Playgroud)

将计数($ all)放在for循环中使得它为每个循环计算此语句.首先计算该值,然后在循环中使用计算使其仅运行一次.

  • 在这两方面都不同意你的观点.基准测试并不重要 - 在PHP脚本中200微秒的真实世界差异是什么?没有.看看你展示的代码,并将它与`foreach($ all)`进行比较.哪个更容易阅读和维护? (2认同)

Jvd*_*erg 5

  • 对于性能而言,如果选择一个for或一个while循环并不重要,迭代次数决定了执行时间.
  • 如果您知道正手的迭代次数,请选择一个for循环.如果要在某个条件下运行和停止,请使用while循环