67

Pseudo Code

text = "I go to school";
word = "to"
if ( word.exist(text) ) {
    return true ;
else {
    return false ;
}

I am looking for a PHP function which returns true if the word exists in the text.

2

8 Answers 8

116

You have a few options depending on your needs. For this simple example, strpos() is probably the simplest and most direct function to use. If you need to do something with the result, you may prefer strstr() or preg_match(). If you need to use a complex pattern instead of a string as your needle, you'll want preg_match().

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

strpos() and stripos() method (stripos() is case insensitive):

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

strstr() and stristr() method (stristr is case insensitive):

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

preg_match method (regular expressions, much more flexible but runs slower):

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

Because you asked for a complete function, this is how you'd put that together (with default values for needle and haystack):

function match_my_string($needle = 'to', $haystack = 'I go to school') {
  if (strpos($haystack, $needle) !== false) return true;
  else return false;
}

PHP 8.0.0 now contains a str_contains function that works like so:

if (str_contains($haystack, $needle)) {
    echo "Found";
}
2
  • 3
    Non php'ers (like myself) note the double-equals in !== false because strpos() may return 0 if a match is found right at the beginning of the string (character position zero).
    – Josh
    Commented Nov 28, 2013 at 13:36
  • 3
    couldn't you just do return (strpos($haystack, $needle) !== false);? It has the exact same result, just a cleaner code
    – Nico
    Commented Nov 12, 2014 at 13:37
21
function hasWord($word, $txt) {
    $patt = "/(?:^|[^a-zA-Z])" . preg_quote($word, '/') . "(?:$|[^a-zA-Z])/i";
    return preg_match($patt, $txt);
}

If $word is "to", this will match:

  • "Listen to Me"
  • "To the moon"
  • "up-to-the-minute"

but not:

  • "Together"
  • "Into space"
1
  • Perfect solution, as strpos() returns true even if it matches a part of string instead of whole word. Example: $haystack="check that fork"; $needle="for"; Now in this case, strpos() will find a match and return true. But peg_match() won't find 'for' word in the haystack, it will return 0.
    – Saket
    Commented Sep 23, 2020 at 19:35
15

use:

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

or

return (stripos($text,$word) !== false); //case-insensitive
0
5

strpos

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

if ($pos === false) {
    return false;
} else {
    return true;
}
?>
3
$text="I go to school";
return (strpos($text, 'to')!== false);

The manual page you need to find the correct usage of strpos

1

Another way (besides the strpos examples already given is to use the 'strstr' function:

if (strstr($haystack, $needle)) {
   return true;
} else {
   return false;
}
1

You can use these string functions,

strstr — Find the first occurrence of a string

stristr — Case-insensitive strstr()

strrchr — Find the last occurrence of a character in a string

strpos — Find the position of the first occurrence of a substring in a string

strpbrk — Search a string for any of a set of characters

If that doesn't help then you should use preg regular expression

preg_match — Perform a regular expression match

1

PHP 8 New Function str_contains

if (str_contains('Foo Bar Baz', 'Foo')) {
  echo 'Found';
}

OR

Use strpos function in php .

$text = "I go to school";
$word = "to"
if (strpos($text,$word) !== false ) {
    echo 'true';
}

Not the answer you're looking for? Browse other questions tagged or ask your own question.