问题 解释替代PHP For循环语法:for($ i = 1,$ j = 0; $ i


已经给出了该示例作为用于写入的替代示例(准确地示例4) for 循环 PHP.net

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);

我明白 for 循环,我只是不明白为什么变量, $j,在此版本中声明了一个打印数字1到10的for循环。

仅供参考:从for循环中删除变量对结果没有任何影响。


12346
2017-12-13 07:09


起源

非常好的问题。那 $j = 0 只会被评估一次然后 $j += $i 是为了什么? - JakeGould
它似乎不是 j 除了总和以外什么都做了 i ... o.O - Andrew
好吧,文档似乎采用了与语言本身类似的风格。臃肿而充满了陷阱。 - Richard
@Richard:我所知道的每种语言都可以使用这种语法使用for循环... C,C ++,Java,JavaScript,可能还有很多这里列出的语言: en.wikipedia.org/wiki/List_of_C-family_programming_languages - Jost
@Jost我批评文档,而不是这个特定的语法。 - Richard


答案:


我认为这只是为了说明你可以使用带逗号的多个语句这一事实。
它在这里没用,但是显示了以下语法的示例:

[...]每个表达式都可以为空或包含用逗号分隔的多个表达式。在expr2中,将使用逗号分隔所有表达式,但结果取自最后一部分。 [...]


4
2017-12-13 07:37





虽然在这个例子中似乎没有必要。看起来 $j 存储迭代的总和:

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

这在某些情况下很有用。因此,这意味着这种循环方式相当于在每次迭代时执行多次操作,例如获取求和,平均值,最大值等。示例的要点是您可以应用以逗号分隔的多个语句。


3
2017-12-13 07:34





说明 

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);

for循环由分号(;)分隔三部分。

  1. 初始化
  2. 比较和测试
  3. 增量或减量。

    • 这里$ i = 1,$ j = 0是初始化。
    • $ I <= 10;是比较和测试
    • $ j + = $ i,print $ i,$ i ++是增量或减量部分

现在在增量或减量部分,您有三个任务。
 1.最后$ i增加$ j  打印$ i  3.将$ i递增1

所以在你的程序中,$ j没用。因为它没有参与   打印或比较和测试。

因此,如果从每个位置删除$ j并将其写为,则循环非常简单

for ($i = 1; $i <= 10; $i++){
    print $i;
}

但是这个$ j变量可以在你从这个代码块开始循环之后使用。

喜欢

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++); 
print $j;

2
2017-12-13 07:37