我正在尝试创建一个所谓的希腊数字转换器工具。这里的输入将是字母,这些字母将被转换成数字。对于每个字母,都会有一个相应的数字,并考虑数字。现在,我的想法是创建一个数组,其中所有的字母和它们对应的数值都将被放入。因此,当用户输入字母组合(最多只能输入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变量。这意味着大圆圈里的任何东西都可以使用它。