phpstringsubstringcontainsstring-matching

How do I check if a string contains a specific word?


Consider:

$a = 'How are you?';

if ($a contains 'are')
    echo 'true';

Suppose I have the code above, what is the correct way to write the statement if ($a contains 'are')?


Solution

  • Now with PHP 8 you can do this using str_contains:

    if (str_contains('How are you', 'are')) { 
        echo 'true';
    }
    

    Please note: The str_contains function will always return true if the $needle (the substring to search for in your string) is empty.

    $haystack = 'Hello';
    $needle   = '';
    
    if (str_contains($haystack, $needle)) {
        echo "This returned true!";
    }
    

    You should first make sure the $needle (your substring) is not empty.

    $haystack = 'How are you?';
    $needle   = '';
    
    if ($needle !== '' && str_contains($haystack, $needle)) {
        echo "This returned true!";
    } else {
        echo "This returned false!";
    }
    

    Output: This returned false!

    It's also worth noting that the new str_contains function is case-sensitive.

    $haystack = 'How are you?';
    $needle   = 'how';
    
    if ($needle !== '' && str_contains($haystack, $needle)) {
        echo "This returned true!";
    } else {
        echo "This returned false!";
    }
    

    Output: This returned false!

    RFC

    Before PHP 8

    You can use the strpos() function which is used to find the occurrence of one string inside another one:

    $haystack = 'How are you?';
    $needle   = 'are';
    
    if (strpos($haystack, $needle) !== false) {
        echo 'true';
    }
    

    Note that the use of !== false is deliberate (neither != false nor === true will return the desired result); strpos() returns either the offset at which the needle string begins in the haystack string, or the boolean false if the needle isn't found. Since 0 is a valid offset and 0 is "falsey", we can't use simpler constructs like !strpos($a, 'are').