案例1循环在另一个循环中我可以同时分配$i
变量用于递增吗?
for($i=0; $i < 10; $i++)
{
for($i=0; $i < 5; $i++)
{
echo "You are too cute";
}
}
案例2:如果不在里面,我可以为两者声明$i
吗?
for($i=0; $i < 10; $i++)
{
}
for($i=0; $i < 5; $i++)
{
}
答案 0 :(得分:3)
案例1 :你会得到一个非常奇怪的结果,请查看here
怎么做得好?检查出here
for($i=0; $i < 10; $i++){
for($k=0; $k < 5; $k++){
echo "1)".$i." 2)".$k."\n";
}
echo "\n";
}
<小时/> 案例2 :如上述评论和其他答案所述,工作正常。 但是,我可以在例如这个例子中添加它。
for($i=0; $i < 10; $i++){
echo $i."\n";
}
echo "\n Outside the loop: ".$i." \n";
for($i=0; $i < 5; $i++){
echo $i."\n";
}
在循环发生后,您仍然可以访问$i
。您再次使用$i
的原因是因为您再次声明它$i =0;
,而没有兴趣转向当前正在运行的另一个循环(正如 case 1 中所发生的那样)。
您可以测试此示例here
答案 1 :(得分:3)
已经有一些答案很好,但这里的观点略有不同。
这取决于你的意思“can”。 可以执行此操作,因为它是语法正确的PHP代码。
for($i=0; $i < 10; $i++)
{
for($i=0; $i < 5; $i++)
{
echo "You will never see this text in your browser.";
}
}
但是因为循环没有在PHP中引入新的变量作用域,所以它会创建一个无限循环。
外部循环将执行一次,然后内部循环将$i
重置为0
,将其增加到5
,将控制权返回到外部循环,这将立即执行一次导致内循环重新开始,将$i
重置为0
并将其递增到5
,依此类推,永远(至少在您的脚本超时之前)。外部循环永远不会结束,因为内部循环会影响$i
,因此它永远不会满足外部循环的退出条件。
换句话说,只需为内循环使用不同的变量。删除一个整数变量不会是你的代码的显着优化,如果这是你关心的。
在第二个例子中,没有理由不重用$i
。
答案 2 :(得分:1)
案例1:不,你不能。你需要为每个循环单独创建变量。
for($i=0; $i < 10; $i++)
{
for($j=0; $j < 5; $j++)
{
echo "You are too cute";
}
}
案例2:是的,你可以。
for($i=0; $i < 10; $i++)
{
echo "You are too cute";
}
for($i=0; $i < 5; $i++)
{
echo "You are too cute";
}
答案 3 :(得分:1)
案例1:
简短回答不,你不能。
答案很长。
首先,您需要了解实际变量是什么以及Loop实际上是如何工作的。
每个变量实际上都是对记忆的引用。在您的示例中,您创建了一个名为$ i的变量,并且在将值递增1后,它不能大于或等于10。
在机器级别,它被转换为存储器中的地址。例如,$ i指向随机地址0xF25当你循环并递增它时,下一个地址变为0xF30。
当您编写for循环时,编译器会自动分配一个固定的内存地址,并将该地址限制在您的变量范围内。
编译器的作用是,它为该令牌创建一个表($ i)。以简单的形式查看下面的示例
$ i(这是令牌) - &gt; 0xF25(这是值)
当您执行$ i ++
时,此值会更新在嵌套循环编译器中分配相同的表(尽管外部循环不能访问内部循环变量)。如果编译器为内部循环放置相同的变量,那将是矛盾的。因为内部循环可能从内存地址0xE21开始。在那种情况下,当你的外部循环增量值为1时,它将是0xE22,但如上所述,它需要是0xF30。 这就是编译器不允许这样做的原因,我们需要使用 CASE 2 示例。