0

就像这篇文章的标题所说,我将能够检查一个单词的每个字母是否在另一个单词中找到。到目前为止,这些是我能够想出的代码行:

<?php   
        $DBword = $_POST['DBword'];
        $inputWords = $_POST['inputWords'];

        $inputCount = str_word_count($inputWords,1);



        echo "<b>THE WORD:</b>"."<br/>".$DBword."<br/><br/>";
        echo "<b>WORDS ENTERED:</b><br/>";

            foreach($inputCount as $outputWords)
            {
                echo $outputWords."<br/>";
            }

            foreach($inputCount as $countWords)
            {
                for($i=0; $i<strlen($countWords); $i++)
                {$count = strpos( "$DBword", $countWords[$i]);}

                if($count === false)
                {
                    $score++;
                }


            }

            echo "<b><br/>TOTAL SCORE: </b>";
            echo $score;


        ?>

foreach的意思$outputWords是只输出输入的字母。至于另一个foreach$countWords我用它来真正检查输入的单词中的所有字母是否都在$DBword. 我正在使用for循环来检查每个字母。

到目前为止,我没有得到我想要的输出,我只是没有想法。请问有什么想法吗?

4

2 回答 2

1
function contains_letters($word1, $word2) {
  for ($i = 0; $i < strlen($word1); $i++)
    if (strpos($word2, $word1{$i}) === false)
      return false;
  return true;
}

//example usage
if (contains_letters($_POST['inputWords'], $_POST['DBword']))
  echo "All the letters were found.";

如果此检查不区分大小写(即“A”算作“a”的用法),请更改strposstripos.

于 2012-08-21T02:52:08.660 回答
0

由于您在循环中覆盖$count中的for每个字母$countWords$count因此将仅包含最后一个字母的位置$countWord。另外,我不确定为什么在找不到信的情况下会增加分数

无论如何,你让你的生活变得比必要的更困难。
PHP 有一个计算字符串中字符的函数

return count_chars($dbWord, 3) === count_chars($inputWord, 3);

如果在两个字符串中找到相同的字母,将返回 true。

查找具有完全相同字母的所有单词的示例:

$dbWord = count_chars('foobar', 3);
$inputWords = 'barf boo oof raboof boarfo xyz';
print_r(
    array_filter(
        str_word_count($inputWords, 1),
        function($inputWord) use ($dbWord) {
            return count_chars($inputWord, 3) === $dbWord;
        }
    )
);

只会输出“raboof”和“boarfo”。

于 2012-08-21T04:03:07.943 回答