Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php初学者,我可以为多个循环分配相同的变量吗_Php - Fatal编程技术网

php初学者,我可以为多个循环分配相同的变量吗

php初学者,我可以为多个循环分配相同的变量吗,php,Php,案例1循环在另一个循环中,我是否可以为递增分配$I变量 for($i=0; $i < 10; $i++) { for($i=0; $i < 5; $i++) { echo "You are too cute"; } } 案例1:不,你不能。您需要为每个循环分别创建变量 for($i=0; $i < 10; $i++) { for($j=0; $j < 5; $j++) { echo "You are too cute"; }

案例1循环在另一个循环中,我是否可以为递增分配
$I
变量

for($i=0; $i < 10; $i++)
{
  for($i=0; $i < 5; $i++)
  {
     echo "You are too cute";
  }
}

案例1:不,你不能。您需要为每个循环分别创建变量

for($i=0; $i < 10; $i++)
{
  for($j=0; $j < 5; $j++)
  {
     echo "You are too cute";
  }
}
($i=0;$i<10;$i++)的

{
对于($j=0;$j<5;$j++)
{
“你太可爱了”;
}
}
案例2:是的,你可以

for($i=0; $i < 10; $i++)
{
  echo "You are too cute";
}

for($i=0; $i < 5; $i++)
{
   echo "You are too cute";
}
($i=0;$i<10;$i++)的

{
“你太可爱了”;
}
对于($i=0;$i<5;$i++)
{
“你太可爱了”;
}
案例1:如果你得到一个非常奇怪的结果,请检查一下

如何做好这件事?看看这个

($i=0;$i<10;$i++)的
{
对于($k=0;$k<5;$k++){
回声“1”.$i.“2”.$k.“\n”;
}
回音“\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=0;$i<10;$i++)的
{
回显$i.“\n”;
}
回显“\n在循环外部:“.$i.”\n”;
对于($i=0;$i<5;$i++){
回显$i.“\n”;
}
循环发生后,仍然可以访问
$i
。之所以可以再次使用
$i
,是因为您正在声明它
$i=0再次,对当前正在运行的另一个循环不感兴趣(如案例1所示)


您可以测试这个示例

已经有一些很好的答案,但是这里有一个稍微不同的视角

这取决于你所说的“能”是什么意思。您可以这样做,因为它是语法正确的PHP代码

for($i=0; $i < 10; $i++)
{
  for($i=0; $i < 5; $i++)
  {
     echo "You will never see this text in your browser.";
  }
}
($i=0;$i<10;$i++)的

{
对于($i=0;$i<5;$i++)
{
echo“您永远不会在浏览器中看到此文本。”;
}
}
但由于循环不会在PHP中引入新的变量范围,因此它会创建一个无限循环

外循环将执行一次,然后内循环将
$i
重置为
0
,将其递增为
5
,将控制权返回到外循环,外循环将执行一次,立即导致内循环再次启动,将
$i
重置为
0
并将其递增为
5
,以此类推(至少在脚本超时之前)。外循环永远不会结束,因为内循环影响
$i
,因此它永远不会满足外循环的退出条件

换言之,只需为内部循环使用不同的变量即可。删除一个整数变量并不是对代码的明显优化,如果这是您所关心的

在第二个示例中,没有理由不重用
$i

案例1: 简短的回答不,你不能。 答案很长。 首先,您需要了解变量实际上是什么,以及循环实际上是如何工作的。
每个变量实际上都是对内存的引用。在您的示例中,您创建了一个名为$i的变量,在将值递增1后,它不能大于或等于10。 在机器级别,它被转换为内存中的一个地址。例如,$i指向一个随机地址0xF25,当你循环它并递增它时,下一个地址变成0xF30

当您编写for循环时,编译器会自动分配一个固定的内存地址,并且该地址仅限于您的变量范围

编译器所做的是,它为该标记($i)创建一个表

$i(这是令牌)->0xF25(这是值)

当您执行$i时,此值将更新++

在嵌套循环中,编译器分配相同的表(尽管外循环不能访问内循环变量)。如果编译器为内循环放置相同的变量,这将是矛盾的。因为内循环可能从内存地址0xE21开始。在这种情况下,当外循环增量值为1时,它将是0xE22,但如上所述,它需要是0xF30。
这就是为什么编译器不允许这样做的原因,我们需要使用案例2示例。

如果它们没有嵌套,您可以这样做。如果您对嵌套执行此操作,您将得到一些令人讨厌的副作用,因为两个循环都使用相同的变量。请使用不同的变量。案例1:否,案例2:是。循环构造不会影响PHP中的变量范围,也就是说,它不是相同的
$i
。案例一不起作用,因为您将覆盖
$i
的外部循环值。最好对外部循环和内部循环使用不同的变量。您知道,您可以很容易地测试这一点,并回答您自己的问题。我很好奇,为什么您不直接编写此代码并测试它?
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";
}
for($i=0; $i < 10; $i++)
{
  for($i=0; $i < 5; $i++)
  {
     echo "You will never see this text in your browser.";
  }
}