php - 这个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
) 中得到不同的结果。
为什么我得到不同的值?
解决方案
基于 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 变量。
推荐阅读
- azure-functions - Azure Durable Functions 扇出缩放行为不如预期
- bash - 在 MATLAB 中,如何将 Unix 标准输出存储在单元格数组中以进行多行命令?
- r - spark_apply 无法运行程序“Rscript”:在目录“C:\Users\username\AppData\Local\spark\spark-2.3.3-bin-hadoop2.7\tmp\local\spark-..\userFiles
- python - 从表中创建 Python 对象
- c# - 尝试将 IEntity 传递给列表构造函数并遇到问题
- wordpress - 删除产品图片块并将其替换为 HTML 代码
- google-apps-script - 如何调整变量以将事件从一个日历同步到组日历
- java - 对数组中大于输入值的数字求和
- python - 在 Django 中使用 .filter 来查看标题是否包含某个字符串?
- dataframe - 将列从数据框(df1)添加到另一个数据框(df2)