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、equalsの右側には存在しないため、定義されていません。

また、なぜ$ 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で参照する前に定義したことがないためです。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 に答える
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 に答える