逗号在for循环的第一个参数中做了什么?

时间:2013-06-13 04:08:13

标签: php for-loop

for loop的第一个参数中有逗号是什么意思?

例如:

for ($j=0, $n2=sizeof($quotes[$i]['methods']); $j<$n2; $j++) {
    //
}

2 个答案:

答案 0 :(得分:4)

循环第一部分中的逗号只是分隔变量声明。

本质上它只是声明两个变量$j=0$n2=sizeof($quotes[$i]['methods']),但是在循环构造函数中而不是在循环构造函数之前。

答案 1 :(得分:3)

PHP继承了C++ - 就像语法一样。

C++类似的语言通常具有代码块或控制结构的范围可见性,例如:

#include <iostream>

using namespace std;

int main() {

    int a = 0; // main scope;
    int b = 5; // main scope;

    if(a != b){
        int c = a + b; // if scope;
        // a, b, c visible.
    }

    // a and b visible, but c - not visible.

    for(int i = 10; i < 20; i++){
        // for-loop scope:
        // i, a and b visible

        cout << "i: " << i << endl;
    }

    // a and b visible, but i - not visible.

    return 0;
}

PHP没有这样的功能,但继承了语法规则(以及大多数C++代码约定。)

<?php
header('Content-Type: text/plain');

for($i = 0, $j = 10; $i < 10; $i++, $j += 2){
    echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}
?>

等同于

<?php
header('Content-Type: text/plain');

$j = 10;

for($i = 0; $i < 10; $i++){
    echo "{$i} + {$j} = ", $i + $j, PHP_EOL;

    $j += 2;
}
?>

变量$i$j将在for - 循环后的任何地方都可访问,但在for-loop标题部分中声明这些变量可能是为了观察(有些人说,那个这些变量肯定在这个循环中使用)。它也更短。

注意:您可以对,的每个标题部分使用for - 循环播放。


UPDv1:

for - 循环声明:

for(initialization_section; condition_section; post_execution_section){
    // actions
}

每个部分可能包含表达式,但不能包含其他控制结构。

1)initialization_section:

应该包含在循环开始之前执行的表达式。 如果有多个单独的表达式,则应使用逗号,分隔。

for - 循环迭代的任何之前执行

for($i = 0, $j = 1; $i < 10; $i++){
    echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}

结果:

0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
3 + 1 = 4
4 + 1 = 5
5 + 1 = 6
6 + 1 = 7
7 + 1 = 8
8 + 1 = 9
9 + 1 = 10

2)condition_section:

应包含表达式以检查循环是继续还是停止。如果有多个单独的操作,则应使用逗号,分隔。

在每次 for - 循环迭代之前执行

for($i = 1, $j = 0; $i++, $j < 10; $j++){
    echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}

结果:

2 + 0 = 2
3 + 1 = 4
4 + 2 = 6
5 + 3 = 8
6 + 4 = 10
7 + 5 = 12
8 + 6 = 14
9 + 7 = 16
10 + 8 = 18
11 + 9 = 20

for - 循环的这一部分中的逗号导致忽略本节以前的所有表达式,除了最后一个(提及@ icktoofay )。

for($i = 0, $j = 1; $i < 1, $j < 5; $i++, $j++){
    echo "{$i} + {$j} = ", $i + $j, PHP_EOL;
}

结果:

0 + 1 = 1
1 + 2 = 3
2 + 3 = 5
3 + 4 = 7

无论$i < 1false进行第二次迭代。它可以用作默认的预执行语句。

3)post_execution_section:

应该包含在执行循环体动作后执行的表达式。如果有多个单独的操作,则应使用逗号,分隔。

在每次 for - 循环迭代后执行

for($i = 0; $i < 10; $i++, $i *= 2){
    echo $i, PHP_EOL;
}

结果:

0
2
6

此外,每个for - 循环部分可能为空(不执行任何操作),并保留分号;分隔符:

for(;;){
    // infinite loop
}