2012-07-23 28 views
1

我想創建一個所謂的希臘數字轉換工具。這裏的輸入將是字母,這些字母將被轉換爲數字。對於每一個字母,都會有一個對應的數字並考慮數字。現在,我的想法是創建一個數組,其中將放置所有字母及其對應的數值。因此,當用戶輸入字母組合(最多隻能輸入3位數字)時,convert()函數將查找輸入的字母的相應值,獲取值並將所有內容相加。不幸的是,當我沿着編碼走時,我提出了這個錯誤(標題中提到的錯誤),我似乎無法弄清楚如何解決它。這聽起來很愚蠢,但請理解,因爲我仍在學習PHP。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); 




    ?> 

錯誤是關於$總,我似乎無法弄清楚如何解決這個問題。任何幫助將非常感激。非常感謝!

這已經解決了,但爲了可能需要這個的人,我再次編輯這個代碼,目前適用於我。

+0

與你的問題無關,只是一些想法:1.擺脫'text'字段,因爲它從來沒有使用(也刪除getter/setter); 2.使'轉換'一個靜態函數,你不會通過實例化一個'GreekNum'對象獲得任何東西。 – 2012-07-23 17:46:55

+0

爲了將來的參考,如果您在運行代碼時出現錯誤,請在此處提供確切的錯誤文本。 – ernie 2012-07-23 17:47:18

回答

3

需要聲明$total纔可以使用它,嘗試它不」以下

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

原因在你的情況下工作是因爲你在做$total += $text[$i];這擴大到$total = $total + $text[$i];不幸的是$total在等號的右側不存在,因此它是未定義的。

林也想知道爲什麼你正在訪問$文字就好像它是一個數組,它是一個字符串,我相信$收集符合你的價值觀的陣列。

所以你需要做的是分裂首先將$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這將返回值這我相信是你想要的結果?

+0

又一次downvote沒有explotation,請關心實際解釋?或者是因爲他們意識到自己沒有什麼值得貢獻的東西而充滿了沒有解釋就倒下的人呢? – 2012-07-23 18:09:12

+0

嗨,喬恩,感謝您的最後評論。我現在所做的是,因爲你想知道爲什麼我要訪問$ text,就好像它是一個數組,雖然它是一個字符串,但我實際上是在尋找一種將字符串轉換爲數組的方法。我能夠通過使用str_split來實現。 但是,想要發生的事情不會發生。當我嘗試輸入時說,'AAA'的輸出仍然是0.出於某種原因,數組裏面的值沒有找到我使用的函數來查找值(array_key_exists)似乎並沒有找到我是什麼尋找。對此有何想法? – user1242749 2012-07-23 23:26:42

+0

@ user1242749我已重新編輯,向您展示如何使用str_split – 2012-07-24 00:07:35

1

因爲您在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; 
+0

非常感謝nickb。非常感謝您的幫助。不幸的是我遇到了另一個問題。現在的問題是,儘管我已經輸入了不同的值,但總額仍然爲0。出於某種原因,數組無法讀取。也許array_key_exists?請多幫忙? – user1242749 2012-07-23 17:53:10

1

有錯誤是在這條線我認爲:

$total += $text[$i]; 

的問題是,你在本質上是試圖做到這一點:

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

關於你的第一次迭代的價值$總量沒有設置,所以你得到這個PHP的通知。

您可能希望在腳本的某個早期點聲明$ total = 0或類似的內容。

1

基本上你在for循環中聲明瞭$ total。這是一個問題的原因是因爲當你在某處聲明一個變量時,這意味着它只能在該域中使用。將整個文件視爲一個圓圈,每次創建for循環時,都會在其中創建小圓圈。所以當你創建$ total時,它就是在更大的圓圈內的那個小圓圈中創建的。它的範圍只在for循環中。當你退出for循環時,變量就消失了。 python等一些語言允許你這樣做,但也許不是php。如果你想解決這個問題,在for循環外聲明你$總變量。這意味着更大的圈子中的任何東西都可以使用它。

+0

事實上,他從來沒有初始化總額,所以當他嘗試+ =時,它失敗 – ernie 2012-07-23 17:50:04

相關問題