未定义的偏移量:9,未定义的变量

时间:2012-03-29 00:36:24

标签: php

此行错误:$an = explode(";", $f[$i]); 这也是:if ($wasone)(未定义的变量) 有帮助吗?谢谢。

<?

    if ($_POST["submit"])
    {
        $a = answer();
        $out =  "Q: $ask<br>A: ".$a;
        $tile = ($cfg["scrolling"]) ? $tile : "";
        echo "$out<br>$tile";
        echo "<input name='tile' type='hidden' id='tile' value='$out<br>$tile'>";
    }

    // answers
    function answer()
    {
        global $cfg, $ask;
        $ask = (empty($ask)) ? "<empty>" : $ask;
        $kick = array("?","\n");
        $ask = str_replace($kick,"",$ask);
        $f = file($cfg["answersfile"]);
        for ($i=0; $i<=count($f); $i++)
        {
            $an = explode(";", $f[$i]);
            $a = $an[0];
            if (strstr($a,trim($ask)))
            {
                if ($wasone)
                {
                    return("Please be more concrete");
                }
                array_shift($an);
                array_pop($an);
                $ai = rand(0, count($an)-1);
                // answering
                $wasone = true;
                $retval = $an[$ai];
            }
        }
        $retval = (empty($retval)) ? "I dont understand you. Please try again." : $retval;
        return $retval;
    }
  ?>

3 个答案:

答案 0 :(得分:3)

for循环中的条件应为

$count = count($f);
for ($i=0; $i<$count; $i++)

没有'='以确保只访问的索引范围从0到count-1

答案 1 :(得分:1)

该行

   for ($i=0; $i<=count($f); $i++)

应该是

   for ($i=0; $i<count($f); $i++)

count()返回$ f的元素数,这比$ f的最后一个元素的索引多一个(在本例中为9)。你想在$ i越过最后一个元素的索引之前停止

答案 2 :(得分:1)

默认情况下,数组索引从0开始。如果是count($f) === 9,则表示您的数组中包含索引0, 1, 2 ... 8。如果你在$i <= 9时循环,那么你将尝试访问索引为9的元素......这不存在。