就像这篇文章的标题所说的那样,我能够检查一个单词的每个字母是否都出现在另一个单词中。到目前为止,这些是我能够提出的代码行:
<?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
循环检查每个字母。
到目前为止,我没有得到我想要的输出,我只是用尽了想法。有什么想法吗?
答案 0 :(得分: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'的用法),请将strpos
更改为stripos
。
答案 1 :(得分:0)
由于您在$count
中的每个字母的for
循环中覆盖$countWords
,$count
将仅包含$countWord
的最后一个字母的位置。另外,我不确定为什么你在找不到的时候增加分数。
无论如何,你的生活比必要的更困难 PHP有一个function for counting chars in a string:
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”。