Почему я не получаю такой же вывод?

Я пытаюсь проверить, является ли строка 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;
?>

1

Решение

Вторая версия неверна, потому что вы не можете определить, что предложение является панграммой, основываясь на проверке только одного символа из алфавита. Так что поиск подходящего символа не означает, что это панграмма. Единственное, что вы можете сделать, это определить, что предложение не панграмма, когда одна из букв в алфавите не существуют в тестовой строке. Поэтому вы должны исходить из предположения, что это панграмма, искать каждую букву, и если поиск не удался, вы делаете вывод, что это не так.

Вы также можете прекратить зацикливание, как только это произойдет — одного сбоя достаточно, чтобы сделать вывод, что это не панграмма.

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

Другие решения

очень простой код проверки панаграммы

$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

Вы должны использовать предикаты, иначе результат может меняться на каждом тике итерации:

$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 снова и так далее …

0
По вопросам рекламы [email protected]