Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有正则表达式的PHP拉丁语程序?_Php_Arrays_String_Foreach - Fatal编程技术网

没有正则表达式的PHP拉丁语程序?

没有正则表达式的PHP拉丁语程序?,php,arrays,string,foreach,Php,Arrays,String,Foreach,基本上,我正在尝试用PHP编写一个非常基本的程序,它只接受用户输入,并用PHP将其翻译成Piglatin,而不使用正则表达式。这就是我的代码到目前为止的样子,很好: <?php # script $original = $_REQUEST['original']; $array = explode(" ", $original); $piglatin = ""; foreach($array as $word) { $word = trim($word); $first

基本上,我正在尝试用PHP编写一个非常基本的程序,它只接受用户输入,并用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;
?>

除非它不考虑特殊情况,例如,如果一个单词以元音开头(在这种情况下,例如“igloo”一词应打印为“iglooway”),或者如果它以“th”或“sh”开头(在这种情况下,例如“thimble”一词应打印为“imblethay”,将前两个字母带到末尾,而不仅仅是前一个。)

我已经开始了用以“th”和“sh”开头的字符串创建变量的过程(请参见$thsh和$thshrest),但是我真的很困惑我应该从这里走到哪里?

一个正则表达式解决方案(可能不是您想要的,但我想展示它是多么简单):

那么:

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 ." ";
}

为什么您不愿意使用正则表达式?
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 ." ";
}