此行错误:$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;
}
?>
答案 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的元素......这不存在。