1

我正在尝试创建一个所谓的希腊数字转换器工具。这里的输入将是字母,这些字母将转换为数字。对于每个字母,都会有一个相应的数字,并且还会考虑数字。现在,我的想法是创建一个数组,其中将放置所有字母及其对应的数值。因此,当用户输入字母组合(最多 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 的,我似乎不知道如何解决这个问题。任何帮助将不胜感激。非常感谢!

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

4

4 回答 4

3

需要先声明$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,我认为这是您的预期结果?

于 2012-07-23T17:43:29.033 回答
1

我假设这一行有错误:

$total += $text[$i];

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

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

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

您可能希望在脚本中的某个较早点声明 $total = 0 或类似内容。

于 2012-07-23T17:44:58.800 回答
1

基本上你在 for 循环中声明了 $total 。这是一个问题的原因是因为当您在某处声明变量时,这意味着它只能在该域中使用。将整个文件想象成一个圆圈,每次创建 for 循环时,都会在其中创建小圆圈。因此,当您创建 $total 时,它是在较大圆圈内的那个小圆圈中创建的。它的范围仅在 for 循环内。当你退出 for 循环时,变量就消失了。像 python 这样的一些语言允许你这样做,但也许不是 php。如果要解决此问题,请在 for 循环外声明 $total 变量。这意味着更大圈子中的任何东西都可以使用它。

于 2012-07-23T17:47:40.533 回答
1

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

$total = 0; // <-- Define total here
for($i=0; $i<$TextLength; $i++)
{
    if(array_key_exists($text[$i], $collection))
    {
        $total += $text[$i];
    }
}
return $total;
于 2012-07-23T17:42:54.233 回答