PHP中for循环和foreach循环有什么区别?

12

for循环和foreach循环在PHP中有什么区别?


3
好的,我会尽力以清晰准确的方式翻译以下内容:
  1. http://de2.php.net/manual/en/control-structures.for.php
这个页面介绍了PHP中的for循环语句。for循环允许您执行指定次数的代码块,可以使用不同的计数器和步长。此外,还可以在循环中使用break和continue语句来控制程序流程。
  1. http://de2.php.net/manual/en/control-structures.foreach.php
这个页面介绍了PHP中的foreach循环语句。foreach循环允许您迭代数组和对象,并在每次迭代中访问当前元素的值和键。此外,还可以使用引用来修改数组元素的值。
- Gordon
1
我建议您查看一些关于这两种类型的循环的文档。它们之间有一些根本性的区别。或者你有一个具体的问题吗?如果是这样,请在你的问题中澄清。 - user254875486
8个回答

14

Foreach循环非常适合遍历使用键和值的数组。

例如,如果我有一个名为“User”的数组:

$User = array(
    'name' => 'Bob',
    'email' => 'bob@example.com',
    'age' => 200
);

我可以很容易地遍历它,并仍然利用这些键:

foreach ($User as $key => $value) {
    echo $key.' is '.$value.'<br />';
}

这将打印出:

name is Bob
email is bob@example.com
age is 200

使用 for 循环时,很难保留键的使用。

如果你在 PHP 中使用面向对象编程,你会发现几乎完全使用 foreach,只有在处理数字或基于列表的数据时才使用 for 循环。使用 foreach 还可以避免使用 count($array) 来查找数组中元素的总数。


3

foreach 循环适用于遍历数组或对象的元素。

for 循环用于执行任何具有定义的起始条件、停止条件和迭代指令的操作。

因此,for 循环可以用于更广泛的事情。实际上,如果没有第三个表达式 - 即没有迭代指令 - for 就成为了一个 while 循环。

示例:

// Typical use of foreach
// It's strength is iterating over arrays & objects
$people = array("Tom", "Dick", "Hairy");

foreach ($people as $person) {
    echo "$person <br/>"; }

工作示例

现在你可以用for做完全相同的事情,但为什么要麻烦呢?相反,for可以用于完全不同的事情:

// Prints random names from array until Hairy is picked
for ($people = array("Tom", "Dick", "Hairy"); // initial condition
     $people[0] != "Hairy";                   // stop condition
     shuffle($people)                         // iteration instructions
    ) {
    echo "$people[0] <br/>";
}

工作示例

初始条件在 for 循环之前完成,无论如何都会执行。如果停止条件评估为 false,则循环将立即停止。更改指令在每次循环结束时执行。请注意,更改指令不必是递增的。

以下是将 for 循环转换为 while 循环的示例,省略了迭代指令。

// Does the loop a random number of times.
// No thired expression
for ($rand = function() {$array = array(true, true, true, true, false);
         shuffle($array);
         return $array;
        };                   
     current($rand()); 
     // empty third expression
 ) {  

    echo "I bring nothing to the table.<br/>";
}

Working example


1

这应该很简单。

foreach 抽象了一些复杂性,通常更容易。每当我不需要知道数组的数字索引或 $key => $value 无法提供它时,我就使用它。

for 是旧的 C 风格,您必须先执行 count(),以便知道循环需要多少次迭代。当您需要知道索引或向后计数或按不同组进行步进时,它非常有用。


1
for 循环中,expr2 可以是您认为的结束条件。它不一定要是 count()。例如,使用迭代器可以这样做:for($it->rewind(); $it->valid(); $it->next()) { /* ... */},但也可以是回调函数、数据库查询或其他任何东西。 - Gordon
1
@Gordon:我也差不多要说同样的话了。这里的每个人似乎都认为for循环只能用于数字... - Felix Kling
@Felix @Gordon,我试图用一个简单的例子来遍历数组。但还是感谢你们的建议。 - alex

1
一个 "for" 循环会给你一个递增的数字(在其最常见的用法中),你可以按照任何你喜欢的方式使用它。
"foreach" 是一个专门用于查看数组连续成员的特殊结构。
例如,你可以使用 "for" 循环来创建一个与 "foreach" 相同的功能。但是 foreach 可以用更少的代码实现相同的功能。

1
如果你定义了,for 只会给你一个递增的数字。在 for 中使用的表达式是任意的。 - Gordon

0
foreach 基本上是以下操作的捷徑
//Foreach method
foreach ($myArray as $myVar)
{
}

//Normal for equivalent
for ($i = 0; $i < $limit; $i++)
{
$myVar = $myArray[$i];
}

但是还有其他问题,阅读此文 了解更多


0
更好而且简单的答案是: foreach 和 for 循环的区别为:
  1. Foreach Loop:- Details are following.
    a) Foreach loop used when you have an array, without array it's not worked.
    b) Loop working at the end of array count. For example an array have 5 value 
     then   loop run 5 times.
    c) Syntax is following.
      $array = array("Surinder","Rahul","Manoj","Bharti","Rana","Manish");     
      Foreach($array as $name ){
         echo "Employe Name is ".$name.".";
      }
   This will print as following.
     Employe Name is Surinder.
     Employe Name is Rahul. 
     Employe Name is Manoj.
     Employe Name is Bharti.
     Employe Name is Rana.
     Employe Name is Manish.



 2. For Loop:- Details are following.
    a) For loop used according to condition.
    b) Loop working at the end of given condition.
    c) Syntax is following.
       $array = array("Surinder","Rahul","Manoj","Bharti","Rana","Manish");
       For($i=0;$i<6;$i++){
          echo "Employe Name is ".$array[$i].";
       }
    At the place of 6,You can used count array function.
    This will print as following.
    Employe Name is Surinder.
    Employe Name is Rahul.
    Employe Name is Manoj.
    Employe Name is Bharti.
    Employe Name is Rana.
    Employe Name is Manish.
    These are the difference between Foreach and for loop. 

更多信息请前往:http://ibmphp.blogspot.com/2012/10/difference-between-foreach-and-for-loop.html


0

foreach 用于迭代数组,除此之外无其他用途。
for 是通用的基于计数器的循环。


1
从 PHP 5 开始,迭代对象也是可能的。 - Gordon

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接