0

这是代码:

<?
$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()生成无限加载的循环。

为什么?问题出在哪里?

4

2 回答 2

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为解决此问题。

于 2013-06-12T09:58:45.843 回答
1

起初 $i 是一个数字,然后 $i++ 按预期递增,但随后您将 $i 更改为 "C".$i

所以 $i="C2" 现在我猜想应用于 C2 值的 ++ 运算符永远不会使其> 4

于 2013-06-12T09:59:24.617 回答