PHP中while循环和for循环的区别?

Posted

技术标签:

【中文标题】PHP中while循环和for循环的区别?【英文标题】:Differences between a while loop and a for loop in PHP? 【发布时间】: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 循环吗?

【问题讨论】:

【参考方案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;;) 以确保在父范围内声明变量会更安全。

以上是关于PHP中while循环和for循环的区别?的主要内容,如果未能解决你的问题,请参考以下文章

各位懂软件,的分别使用while和do…whil循环输出1—10之间的所有数字,包括1和10这题咋做

2022年最新Python大数据之Python基础

Python里for和while的区别(74)

for 循环与while循环的区别

js中for循环和while循环在使用的时候有何区别?

for循环和while循环的区别?