无限加载问题PHP

时间:2013-06-12 09:52:59

标签: php for-loop foreach

以下是代码:

<?
$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()循环。

为什么呢?问题出在哪里?

2 个答案:

答案 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