这是关于PHP但我毫不怀疑许多相同的评论将适用于其他语言。

简单地说,有什么差别在不同类型的循环PHP?是一个速度更快更好的他人或者我应该简单地放在最可读性循环?

for ($i = 0; $i < 10; $i++)
{
    # code...
}


foreach ($array as $index => $value)
{
    # code...
}


do
{
    # code...
}
while ($flag == false);
有帮助吗?

解决方案

为循环,并同时循环是进入条件的循环。他们评估状况,这样的声明块相关的循环不会运行,甚至一次如果条件无法满足

该发言在这个循环的框会运行10次,美元值,我将0至9;

for ($i = 0; $i < 10; $i++)
{
        # code...
}

同样的事情做,同时循环:

$i = 0;
while ($i < 10)
{
    # code...
    $i++
}

这样做-,同时循环出口条件的循环。它保证执行一次,然后将评估状况之后重复块

do
{
        # code...
}
while ($flag == false);

foreach用于访问阵元从开始到结束。在开始foreach循环,内部指针的阵列的设定的第一个元件阵列,在下一个步骤是设置为2元件阵列,并等,直到该阵列结束。在环块的价值流阵列项目提供美元数值和关键的当前项目提供美元的索引。

foreach ($array as $index => $value)
{
        # code...
}

你可以做同样的事情,同时循环,这样的

while (current($array))
{
    $index = key($array);  // to get key of the current element
    $value = $array[$index]; // to get value of current element

    # code ...  

    next($array);   // advance the internal array pointer of $array
}

最后一点: PHP手册 是你的朋友:)

其他提示

这是CS101,但由于没有其他人已经提到它,虽然循环评估他们的条件之前码块,并做,同时评估后码块,这样做-,同时循环总是保证他们的代码区块至少有一次,不论的条件。

@brendan:

这篇文章你引用的是认真的已经过时,信息是只是简单的错误。特别是最后一点(利用 for 而不是的 foreach)是误导性的理由提供文章没有再适用于现代版本。网。

虽然是真的 IEnumerator 使用虚拟的呼吁,这些 可以 实际上是内联通过一个现代化的编译器。此外,.净现在知道泛型和强类型枚举数。

有很多的性能测试,证明, for 一般是没有的速度比 foreach. 这里有一个例子.

我用的是第一个回路迭代时在传统的(索引的?) 阵列和foreach循环当处理联阵列。它似乎只是自然的,并有助于代码的流动和更具可读性,在我的意见。至于做...同时循环,我利用这些时我要做的不仅仅是翻过一阵列。

我不确定任何业绩的好处,虽然。

表现为不大大好,在任何一种情况。同时有助于更复杂的任务比迭代,但是 forwhile 在功能上等同的。

Foreach 是好的,但有一个重要的警告:你的 不能修改 在枚举你迭代.因此,没有消除,增添或更换项/。修改条目(如改变它们的性质)是确定的,当然。

与foreach循环,一份原始数组是由在存储器中使用的内部。你不应该使用他们的大型结构;一个简单的循环是一个更好的选择。你可以使用,同时循环更有效地在一大型非数字索引的结构是这样的:

while(list($key, $value) = each($array)) {

但是,这种方法尤其丑陋的一个简单的小结构。

虽然循环更适合于通过循环流,或者如下例所示,你看到非常频繁地在PHP:

while ($row = mysql_fetch_array($result)) {

几乎所有的时间不同的循环是可互换的,这会降下来到)的效率,或者b)清晰度。

如果你知道的效率权衡取舍的不同类型的循环,然后是回答你最初的问题:使用那个看起来最干净的。

每个循环构建服务于不同的目的。

为-这是用循环的特定数量的迭代。

foreach-这是用于通过循环的所有价值观的集合。

虽然这是用来循环直到你遇到一个条件。

三、"同时"将最有可能提供最佳效能,在大多数情况下。当然,如果你做的事如下,则基本上重写的"for"循环(其中c#是稍微更高性能的).

$count = 0;
do
{
   ...
   $count++;
}
while ($count < 10);  

他们都有不同的基本目的,但它们也可以用在有些相同的方式。它完全取决于具体的问题,你们试图要解决。

与foreach循环,一份原始数组是由在存储器中使用的内部。

Foreach是好的,但有一个重要的警告:你不可以修改的。你迭代.

那些不会是一个问题,如果你通过基准而不是价值:

 foreach ($array as &$value) {

我认为这是允许的,因为PHP5.

在访问的元件阵列,为了清楚起见我会用foreach只要有可能,并且仅使用一个为如果你需要的实际指数的价值(例如,相同的索引中的多数组).这也最大限度地减少有机会用于错误的错误,因为对于循环,使这一切都太容易。在一般情况下,PHP可能不够的地方可太担心的业绩。最后但并非最不重要的,对于和foreach有(或应该有;我不是一个PHP-er)同大O时间(O(n))所以你正在寻找可能在一个小的金额更多的存储器的使用或轻微的变或线性打击的时间。

关于业绩,foreach是更多消耗的比对

http://forums.asp.net/p/1041090/1457897.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top