【问题标题】:Differences between a while loop and a for loop in PHP?PHP中while循环和for循环的区别?
【发布时间】:2011-02-11 12:56:16
【问题描述】:

我现在正在阅读一本关于 PHP 的电子书,作者指出,while 循环和 for 循环之间的区别在于 for 循环会计算它运行的次数。

所以拿这个:

<?php
    for ($i = 1; $i < 10; $i = $i + 1) {
        print "Number $i\n";
    }
?> 

但这和

不一样吗
<?php
    $i = 1;
        while ($i < 10) {
            $i = $i + 1;
            print "Number $i\n";
        }
?>

或者还有其他一些他没有指出的区别? (除了在不确定条件将保持多长时间时使用 while 循环,例如从数据库中选择行)

我的意思是,如果这是唯一的区别,我不能不使用 for 循环而使用 while 循环吗?

【问题讨论】:

    标签: php for-loop while-loop


    【解决方案1】:

    “For”更清楚地表达了你的意图

    从功能上讲,您的两个示例是相同的。但他们表达了不同的意图。

    • while 的意思是“我不知道这种情况会持续多久,但只要持续,就做这件事。”
    • for 表示“我有特定的重复次数供你执行。”

    你可以在你的意思是另一个时使用一个,但它更难阅读代码。

    for 在这里更可取的一些其他原因

    • 更简洁,将有关循环的所有信息放在一个位置
    • 它使$i 成为循环的局部变量

    别忘了foreach

    就我个人而言,我在 PHP 中最常使用的循环是 foreach。如果你发现自己在做这样的事情:

    for ($i=0; $i < count($some_array); $i++){
      echo $some_array[$i];
    }
    

    ...然后试试这个:

    foreach ($some_array as $item){
       echo $item;
    }
    

    打字速度更快,阅读更容易。

    【讨论】:

      【解决方案2】:

      你可以吗?是的,当然了。但是你是否应该是一个完全不同的问题。

      for 循环在这种情况下更具可读性,并且绝对是几乎所有具有循环指令的语言中都会使用的约定。如果您使用while 循环,人们会想知道为什么您没有使用for 循环。

      【讨论】:

      • 所以主要是偏好问题?和标准化?
      • 首选哪个循环取决于适合代码的内容,而不是您的个人喜好。如果您了解这两种循环的工作原理,您将通过经验了解在何处/何时使用每种类型。
      • 虽然循环通常更容易出错,所以一般来说,在我的代码中,我只在多行初始化或不适合 for 循环声明的棘手问题时执行它们
      • @Rob:是的,尽管您可以将其写成$i++++$i。如果它本身是一个声明,则没有行为差异。唯一的区别是它是否是表达式的一部分,例如 $j = $i++$j = ++$i。将++ 放在末尾会使增量发生在 引用变量之后,因此$j 将具有$i 的值 增量之前。在后一个示例中(++$i 之前),$j 将在增量之后 被赋予值。换句话说,在任一语句结束后,第一个语句使$j 等于$i-1,第二个语句使$j 等于$i
      • @Rob:不是必须的,但考虑到输入++$i 和输入$i++ 一样容易,为什么不呢? :)
      【解决方案3】:

      在功能上,for 循环等价于while 循环;也就是说,每个都可以重写为另一个,而不会改变结果或副作用。但是,每个都有不同的内涵。 while 循环在条件成立时运行;情况是静态的,尽管情况会发生变化。 for 循环在序列上运行。区别对程序员很重要,但对程序不重要,就像变量名称的选择对程序员很重要,即使它们可以更改以生成功能等效的代码。根据具体情况,一种循环结构会比另一种更有意义。

      【讨论】:

        【解决方案4】:

        一个for循环

        for (INIT; CONDITIONS; UPDATE) {
            BODY
        }
        

        基本上和这样结构的while循环相同:

        INIT
        while (CONDITIONS) {
            BODY
            UPDATE
        }
        

        虽然您在技术上可以使用其中一种,但在某些情况下whilefor 效果更好,反之亦然。

        【讨论】:

        • 循环变量初始化。 $i = 1;在你的例子中。
        【解决方案5】:

        for() 和 While() 之间的主要区别在于我们必须定义限制或计数,但在 while() 循环中我们不定义限制或计数,直到到达最后一项才会起作用

        FOR 循环 初始化可以在循环语句内或循环外。 它通常在迭代次数已知时使用。 条件是一个关系表达式。 当初始化和增量很简单时使用它。 for ( 初始化 ; 条件 ; 迭代 ) { 声明; }

        WHILE 循环 初始化总是在循环之外。 它通常在迭代次数未知时使用。 条件可以是表达式或非零值。 它用于复杂的初始化。 而(条件) { 声明; }

        【讨论】:

          【解决方案6】:

          这是一个品味、个人喜好和可读性的问题。有时while 循环在逻辑上效果更好。有时,for

          根据我的个人规则,如果我不需要变量初始化器,那么我使用while

          但是foreach 循环以它自己的方式很有用。

          另外,对于 PHP 的作用域,不在函数内部的所有变量都是全局的,无论您使用哪种循环控件,该变量都将在循环之后继续存在。

          【讨论】:

          • 那么用for循环,循环完成后变量会重置吗?还是我误会了?
          • 在许多其他语言中,i 不会存在于 for 循环之外,尝试在循环之外访问它会导致错误。然而,在 PHP 中,i 将在声明后的函数范围内可用,无论在何处。
          • 假设你的循环变量不存在于你的 for 循环之外。如果您想再次使用 $i,请务必在再次使用之前为其分配一个新值(重新初始化它)。否则,正如 Internet Friend 上面所建议的那样,您正在教自己一个坏习惯,在更严格的语言(例如 C 或 Java)中根本行不通。这就是“可变范围”的概念。
          • @Rob - 不在 PHP 中,但由于特定的硬范围语言(如 C 或 Java)如何解释变量初始化器几乎取决于该语言,for (int x = 5;;) 可能会或可能不会初始化xfor 块内。如果您需要循环外的变量,则使用int x; for (x=5;;) 以确保在父范围内声明变量会更安全。
          猜你喜欢
          • 1970-01-01
          • 2011-04-01
          • 2022-12-17
          • 2011-04-07
          • 2013-06-12
          • 1970-01-01
          • 2021-05-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多