PHP未定义变量错误新手在这里,可以';我似乎不知道如何改正错误


PHP Undefined Variable Error Newbie Here, Can't seem to figure out how to fix error

我正在尝试创建一个所谓的希腊数字转换器工具。这里的输入将是字母,这些字母将被转换成数字。对于每个字母,都会有一个相应的数字,并考虑数字。现在,我的想法是创建一个数组,其中所有的字母和它们对应的数值都将被放入。因此,当用户输入字母组合(最多只能输入3位数字)时,convert()函数将查找输入的字母的相应值,获取值,并将所有值相加。不幸的是,当我进行编码时,我遇到了这个错误(标题中提到的那个),我似乎不知道如何解决它。这听起来可能很愚蠢,但请理解,因为我仍在学习PHP。

以下是我能够想出的代码。

<?php error_reporting(0);
    class GreekNum
    {

        public function setText($text)
        {
            $this->text=$text;
        }
        public function getText()
        {
            return $this->text;
        }       
        public function Convert($text)
        {
            $TextLength = strlen($text);
            $text = strtoupper($text);
            $text = str_split($text);

            $collection = array(
                                    "A" => 1,
                                    "B" => 2,
                                    "G" => 3,
                                    "D" => 4,
                                    "E" => 5,
                                    "#" => 6,
                                    "Z" => 7,
                                    "Y" => 8,
                                    "H" => 9,
                                    "I" => 10,
                                    "K" => 20,
                                    "L" => 30,
                                    "M" => 40,
                                    "N" => 50,
                                    "X" => 60,
                                    "O" => 70,
                                    "P" => 80,
                                    "Q" => 90,
                                    "R" => 100,
                                    "S" => 200,
                                    "T" => 300,
                                    "U" => 400,
                                    "F" => 500, 
                                    "C" => 600,             
                                    "$" => 700,
                                    "W" => 800,
                                    "3" => 900, 
                                );
            if(isset($text))
            {
                $total = 0;
                for($i=0; $i<$TextLength; $i++)
                {
                    if(array_key_exists($text[$i], $collection))
                    {
                        $total += $collection[$text[$i]];
                    }
                    if(end($text)!='.')
                    {
                        echo "Please make sure your line ends with a period. <br><br>"; 
                        return false;
                    }
                }
                return $total;
            }                   
        }
    }   
    $GreekNum = new GreekNum();
    $text = $_POST['text'];
    $GreekNum->setText($text);
    echo "<br>";
    echo "<b>Entered Values: </b><br>". $GreekNum->getText();
    echo "<br>";
    echo "<br>";
    echo "<b>Decimal Number Equivalence: </b><br/>". $GreekNum->Convert($text);


    ?>

这个错误是关于$total的,我似乎不知道如何解决这个问题。如有任何帮助,我们将不胜感激。非常感谢!

这个问题已经解决了,但为了任何可能需要这个的人,我将再次将其编辑为当前适用的代码。

您需要声明$total才能使用它,请尝试以下

....
$total = 0;
for($i=0; $i<$TextLength; $i++)
{
      .....

它在您的情况下不起作用的原因是,因为您正在执行$total += $text[$i];,它扩展到$total = $total + $text[$i];。不幸的是,等号右侧的$total不存在,因此它是未定义的。

我还想知道为什么你访问$text,就好像它是一个数组,是一个字符串,我相信$collection就是你的值所在的数组。

因此,您需要首先将$text字符串拆分为其字符数组。然后,对于这些字符中的每一个,在集合中查找它,如果它存在,则将其值添加到运行总数中。

....
$text = "AQ3";
$TextLength = strlen($text);
$splitText = str_split($text);
$total = 0;
for($i=0; $i<$TextLength; $i++)
{
    $currentCharacter = $splitText[$i];
    if(array_key_exists($currentCharacter, $collection))
    {   
        $total += $collection[$currentCharacter];
    }
}
....

正如您所看到的,$splitText[$i]是当前字符,它在搜索中用作关键字,但在以下语句$total += $collection[$splitText[$i]];中也需要它,因为它是用于查找的关键字。

对于字符串AQ3,这将返回值991我认为这是您的预期结果?

因为在for循环中引用$total之前从未定义过它。你应该这样定义它(你可能想从零开始):

$total = 0; // <-- Define total here
for($i=0; $i<$TextLength; $i++)
{
    if(array_key_exists($text[$i], $collection))
    {
        $total += $text[$i];
    }
}
return $total;

我认为这一行有错误:

$total += $text[$i];

问题是,你本质上是在尝试这样做:

$total = $total + $text[$i];

在您的第一次迭代中,$total的值没有设置,因此您会收到以下PHP通知。

您可能希望在脚本的早期声明$total=0或类似内容。

基本上是在for循环中声明了$total。这是一个问题,因为当您在某个地方声明一个变量时,这意味着它只能在该域中使用。把你的整个文件想象成一个圆圈,每次你创建for循环时,它都会在里面创建小圆圈。所以当你创建$total时,它是在大圆圈里的那个小圆圈里创建的。它的作用域仅在for循环中。当您退出for循环时,变量就不见了。有些语言(如python)允许您这样做,但php可能不允许。如果要修复此问题,请在for循环之外声明$total变量。这意味着大圆圈里的任何东西都可以使用它。