2013-04-25 62 views
3

基本上我正在嘗試在PHP中編寫一個非常基本的程序,它只需要用戶輸入並將其轉換爲Piglatin,而不使用正則表達式。這是到目前爲止我的代碼看起來像,這是很好的:PHP中沒有正則表達式的Piglatin程序?

<?php # script 
$original = $_REQUEST['original']; 
$array = explode(" ", $original); 

$piglatin = ""; 
foreach($array as $word) 
{ 
    $word = trim($word); 
    $first = substr($word,0,1); 
    $thsh = substr($word,1,2); 
    $thshrest = substr($word,2, strlen($word)-2); 
    $rest = substr($word,1,strlen($word)-1); 

    if(trim($word)) 
    { 
     $piglatin .= (strlen($word)==1)?$first." ":$rest.$first. "ay "; 
    } 
} 

echo $original ." becomes: ".$piglatin; 
?> 

只是它不考慮特殊情況下,如果一個詞以元音開頭是(在這種情況下,單詞「冰屋「例如應打印爲」iglooway「),或者如果它以」th「或」sh「開頭(在這種情況下,例如」頂針「一詞應打印爲」imblethay「,以前兩個字母和使他們到最後而不是第一個)

我已經開始創建變量的字符串以「th」和「sh」開頭(請參閱$ thsh和$ thshrest)的過程,但我真的很困惑,我應該從哪裏出發?

+1

爲什麼你是不是願意使用正則表達式? – silkfire 2013-04-25 08:09:30

回答

0

一個正則表達式的解決方案(可能不是你想要的,但我想說明它是多麼容易):

$pig_latin = preg_replace('#^([^aeiou]+)([aeiou]+)(.*)#', '$2$3$1ay', $original); 
$pig_latin = preg_replace('#(^[aeiou].*)#', '$1way', $pig_latin); 
0

如何:

foreach ($array as $word) { 
    if (preg_match('/^[aeiou]/', $word)) { 
     $word = preg_replace('/^([aeiou].+)$/', "$1way", $word); 
    } else { 
     $word = preg_replace('/^(th|sh)(.+)$/', "$2$1ay", $word); 
    } 
    $piglatin .= $word ." "; 
} 
相關問題