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

时间:2015-10-14 18:11:04

标签: php strstr

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

3 个答案:

答案 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;
    }
}