我正在尝试检查字符串是否为PANGRAM,但两个代码都给出了不同的结果。
排名第一 -
<?php
$line = strtolower(trim("thequickbrownfoxjumpsoverthelazydog"));
$letters = str_split("thequickbrownfoxjumpsoverthelazydog");
$result = "pangram";
foreach ($letters as $value) {
if (strstr($line, $value) == FALSE) {
$result = "not pangram";
}
}
echo $result;
?>
第二 -
<?php
$line = strtolower(trim("thequickbrownfoxjumpsoverthelazydog"));
$letters = str_split("thequickbrownfoxjumpsoverthelazydog");
$result = "not pangram";
foreach ($letters as $value) {
if (strstr($line, $value) == TRUE) {
$result = "pangram";
}
}
echo $result;
?>
答案 0 :(得分:1)
非常简单的panagram检查代码
$string = "The quick brown fox jumps over the lazy dog";
$stringData = str_split(strtolower($string));
$check = range('a', 'z');
$res = array_intersect($check, $stringData);
if(count($check) === count($res)) echo 'panagram';
else echo 'not panagram';
多数民众赞成
答案 1 :(得分:0)
您必须使用谓词,否则结果可能会在迭代的每个刻度上发生变化:
$line = strtolower(trim("thequickbrownfoxjumpsoverthelazydog"));
$letters = str_split("thequickbrownfoxjumpsoverthelazydog");
$result = true;
foreach ($letters as $value) {
$result = $result && strstr($line, $value);
}
echo $result ? "pangram" : "not pangram";
使用您的代码,如果找到第一个字母,结果将为TRUE
,但如果找不到下一个字母,则结果为FALSE
,如果找到第三个字母,则为TRUE
将再次xargs
,依此类推......
答案 2 :(得分:0)
第二个版本不正确,因为您无法根据检查字母表中的一个字符来确定句子是pangram。因此找到一个匹配的角色并不意味着它是一个pangram。您可以做的唯一事情是,当字母表中的一个字母不存在于测试字符串中时,确定句子不是一个pangram。所以你必须先假设它是一个pangram,搜索每个字母,当搜索失败时你得出结论不是。
一旦发生这种情况,你也可以停止循环 - 一次失败就足以得出结论,这不是一个pangram。
foreach ($letters as $letter) {
if (!strstr($line, $letter)) {
$result = "not pangram";
break;
}
}