代码:
<?
$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()
循环产生无限加载。
为什么?问题在哪里?
在循环中,您正在用字符串重新分配$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<4
时,循环只运行两次(对于$i = 2和3)。所以在我的代码中,我把这个改成了$i<=4
来修复这个
起初$i是一个数字,然后$i++按预期递增然后你把$i改成"C" $i
so $i="C2"现在我猜++运算符应用于C2值永远不会使它>4