php beginner,我可以为多个循环分配相同的变量

时间:2017-01-19 15:34:18

标签: php

案例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++)
{

}

4 个答案:

答案 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 示例。