2013-07-28 51 views
0

所以我認爲開關可能不是最合適的方法,我該怎麼辦呢? 基本上我想將字符串分解爲單個字母,然後將每個字母的值傳遞給一個新變量。我至今(大多數字母取出來,這樣你可以得到的要點,但我不填滿屏幕):提前在數組中使用開關?

$word = $_POST["word"]; 
$word_value = 0; 
$word_array = str_split($word); 

switch ($word_array){ 
    case "a": 
    case "t": 
     $word_value++; 
     break; 
    case "g": 
    case "d": 
     $word_value +2; 
     break; 
} 

謝謝!

+0

使用字母值的查找表來代替。 –

回答

1

將交換機插入foreach循環,您可以在其中分析數組的每個元素。 $word_array是你的數組,而$word是數組的一個元素。

$word = $_POST["word"]; 
$word_value = 0; 
$word_array = str_split($word); 

foreach($word_array as $letter){ 
    switch ($letter){ 
     case "a": 
     case "t": 
      $word_value++; 
      break; 
     case "g": 
     case "d": 
      $word_value+=2; 
      break; 
    } 
} 
+0

切換案例中的$字不應該是$ word_value嗎?現在,你只是增加,或者增加信件本身。 – Neil

+0

是的......我的錯:) – Perocat

1

試着這麼做:

class Word{ 
    private $pn = 'word'; private $wv = 0; 
    public function __construct($postName){ 
    $this->pn = $postName; 
    } 
    public function change_postName($postName){ 
    $this->pn = $postName; 
    } 
    public function value(){ 
    $wA = str_split($_POST[$this->pn]); 
    foreach($wA as $w){ 
     switch($w){ 
     case 'a': 
     case 't': 
      $this->wv++; 
      return $this->wv; 
     case 'g': 
     case 'd': 
     $this->wv+=2; 
      return $this->wv; 
     } 
    } 
    } 
} 
$wrd = new Word('word'); $word_value1 = $wrd->value(); 

現在你可以改變你在何處獲得信息,如:

$wrd->change_postName('other'); $word_value2 = $wrd->value(); 

和你的字值重置爲零,如:

$nwrd = new Word('word'); 
1

假設值ar e常量,創建第二個數組。該數組保存每個字母的增量。現在你不需要switch語句,只需索引第二個數組。

例如:

$letter_value["a"] = $letter_value["t"] = 1; 
$letter_value["g"] = $letter_value["d"] = 2; 

foreach ($word_array as $letter){ 
    $word_value += $letter_value[$letter]; 
}