为什么我得不到相同的输出?
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';
就是这样
我正在尝试检查字符串是否为 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';
就是这样