Как я могу проверить, содержится ли слово в другой строке с помощью PHP?

Да, лямбда будет создавать мусор, если замыкание захватывает переменную из локальной области (т. Е. gameTime в этом контексте).

Например, следующая функция C #:

static void TestLambda(List<Foo> Foos, DateTime gameTime)
{
    Foos.ForEach(f => f.Update(gameTime));
}

будет переведена на это:

private static void TestLambda(List<Foo> Foos, DateTime gameTime)
{
    Program.<>c__DisplayClass1 <>c__DisplayClass = new Program.<>c__DisplayClass1();
    <>c__DisplayClass.gameTime = gameTime;
    Foos.ForEach(new Action<Foo>(<>c__DisplayClass.<TestLambda>b__0));
}

Обратите внимание, что есть два экземпляра из new в результирующем коде, что означает, что выделяются не только Action объекты (замыкания), но и объекты для хранения захваченных переменных (экранирование записей переменных).

61
задан Sinan Ünür 19 June 2009 в 18:05
поделиться

6 ответов

У вас есть несколько вариантов в зависимости от ваших потребностей. В этом простом примере strpos () , вероятно, является самой простой и удобной функцией. Если вам нужно что-то сделать с результатом, вы можете предпочесть strstr () или preg_match () . Если вам нужно использовать сложный узор вместо строки в качестве иглы, вам понадобится preg_match () .

$needle = "to";
$haystack = "I go to school";

strpos () и метод stripos () (stripos () - регистр нечувствительный):

if (strpos($haystack, $needle) !== false) echo "Found!";

метод strstr () и stristr () (stristr нечувствителен к регистру):

if (strstr($haystack, $needle)) echo "Found!";

метод preg_match (регулярные выражения, гораздо более гибкие, но работают медленнее):

if (preg_match("/to/", $haystack)) echo "Found!";

Потому что вы спросили для полной функции, вот как вы бы сложили это вместе (со значениями по умолчанию для иглы и стога сена):

function match_my_string($needle = 'to', $haystack = 'I go to school') {
  if (strpos($haystack, $needle) !== false) return true;
  else return false;
}
106
ответ дан 24 November 2019 в 17:08
поделиться
function hasWord($word, $txt) {
    $patt = "/(?:^|[^a-zA-Z])" . preg_quote($word, '/') . "(?:$|[^a-zA-Z])/i";
    return preg_match($patt, $txt);
}

Если $ word равно "до", это будет соответствовать:

  • "Слушай меня"
  • "На Луну"
  • "с точностью до минуты"

но не:

  • «Вместе»
  • «В космос»
15
ответ дан 24 November 2019 в 17:08
поделиться

используйте:

return (strpos($text,$word) !== false); //case-sensitive

или

return (stripos($text,$word) !== false); //case-insensitive
13
ответ дан 24 November 2019 в 17:08
поделиться

strpos

<?php
$text = "I go to school";
$word = "to"
$pos = strpos($text, $word);

if ($pos === false) {
    return false;
} else {
    return true;
}
?>
5
ответ дан 24 November 2019 в 17:08
поделиться

Другой способ (помимо уже приведенных примеров strpos - использовать функцию 'strstr':

if (strstr($haystack, $needle)) {
   return true;
} else {
   return false;
}
2
ответ дан 24 November 2019 в 17:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: