首页 > 解决方案 > 这个for循环是什么意思?

问题描述

我偶然发现了一个代码示例中的语法,我以前在 PHP 中的 for 循环中从未见过。

这是做什么的?我为什么要使用这个?

for(;$i<$max;){
    $i++;
    //code..
}

我可以弄清楚它

for($i=0;$i<$max;$i++) {
    //code...
}

我不明白上面两个例子之间的区别。

如果要更具体地说明我的想法。如果我们有此代码(取自 adventofcode 的解决方案):https ://www.reddit.com/r/adventofcode/comments/kdf85p/2020_day_15_solutions/

<?php
$cap = 2020;
$bits = [5,1,9,18,13,8,0];
$i=0;
$time = [];
foreach($bits as $bit) {
    $i++;
    $time[$bit] = $i;
    $say = 0;
}

for(;$i<$cap-1;){
    $i++;
    if(isset($time[$say])) {
        $last = $time[$say];
    }
    else {
        $last = $i;
    }
    $time[$say] = $i;
    $say = $i - $last;
}
echo $say;
?>

并将其与:

<?php
$cap = 2020;
$bits = [5,1,9,18,13,8,0];
$i=0;
$time = [];
foreach($bits as $bit) {
    $i++;
    $time[$bit] = $i;
    $say = 0;
}

for($i=0;$i<$cap-1;$i++){
    if(isset($time[$say])) {
        $last = $time[$say];
    }
    else {
        $last = $i;
    }
    $time[$say] = $i;
    $say = $i - $last;
}
echo $say;
?>

我在 $say.( 376 in first example and 38 in last example) 中得到不同的结果。 为什么我得到不同的值?

标签: phpfor-loop

解决方案


基于 PHP 文档: https ://www.php.net/manual/en/control-structures.for.php

for 循环是 PHP 中最复杂的循环。它们的行为与 C 对应物一样。for 循环的语法是:

for (expr1; expr2; expr3) 语句

尽管:

每个表达式可以为空或包含多个用逗号分隔的表达式。

因此,当您的 for 循环的第一个表达式是“明显的”时,这只是一种“保存代码”的方法,因此不要提及默认的明显表达式 - 您只需“跳过”它。

根据你的例子:

for(;$i<$cap-1;)

我们跳过了第一个表达式 (expr1),因为 $i 在代码块的前面已经定义为 0 ( $i = 0;),所以它是“可跳过的”。不影响代码。

但是,第三个表达式:

在每次迭代结束时,都会评估(执行)expr3。

由于我们没有在循环中提及它,我们负责处理循环本身中 $i 的“增加”(在这种情况下)。

但是-代码的主要区别在于,如果您提到第三个表达式-在每次迭代结束时都会对其进行评估,但在代码块(您的示例)中-我们会在代码开头增加 $i 变量。


推荐阅读