以下是代码:
<?
$C1=array("a"=>1,"b"=>2);
$C2=array("z"=>1,"s"=>2);
$C3=array("x"=>1,"h"=>2);
$C4=array("a"=>1,"c"=>2);
$keywords=array("x","z","h");
for($i=2;$i<4;$i++)
{
$i="C".$i;
$array=$$i;
foreach($keywords as $val)
{
if(isset($array[$val]))
{
echo $i." -> $val<br>";
}
}
}
?>
它应该显示:
C2 -> z
C3 -> x
C3 -> h
如果我写$i=2
而不是for()
循环,它就会写C2 -> z
。
但我必须使用生成无限加载的for()
循环。
为什么呢?问题出在哪里?
答案 0 :(得分:1)
在循环内部,您将$i
变量重新分配给字符串。之后它不会通过循环边界检查。相反,使用另一个变量:
<?
$C1=array("a"=>1,"b"=>2);
$C2=array("z"=>1,"s"=>2);
$C3=array("x"=>1,"h"=>2);
$C4=array("a"=>1,"c"=>2);
$keywords=array("x","z","h");
for($i=2;$i<=4;$i++)
{
$a="C".$i;
$array=$$a;
foreach($keywords as $val)
{
if(isset($array[$val]))
{
echo $a." -> $val<br>";
}
}
}
?>
此外,值得注意的是,你的循环只会运行两次($ i等于2和3),因为你正在比较$i<4
。因此,在我的代码中,我将其更改为$i<=4
以解决此问题。
答案 1 :(得分:1)
首先,$ i是一个数字,然后按预期增加$ i ++ 但是你将$ i改为“C”。$ i
这样$ i =“C2” 现在我猜那个应用于C2值的++运算符永远不会使它> 4