为什么我得不到相同的输出?

Why don't I get the same output?

我正在尝试检查字符串是否为 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;
?>

您必须使用谓词,否则结果可能会在每次迭代时发生变化:

$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,以此类推...

第二个版本不正确,因为您无法仅通过检查字母表中的一个字符来确定一个句子是 pangram。所以找到一个匹配的字符并不意味着它是一个 pangram。您唯一可以做的就是当字母表中的一个字母 not 存在于测试字符串中时,确定句子是 not pangram .所以你必须从假设它是一个 pangram 开始,搜索每个字母,当搜索失败时你得出结论它不是。

一旦发生这种情况,您也可以停止循环——一次失败就足以得出结论,这不是一个 pangram。

foreach ($letters as $letter) {
    if (!strstr($line, $letter)) {
        $result = "not pangram";
        break;
    }
}

非常简单的拼音检查代码

$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';

就是这样