Checking if a string contains another string with PHP

Published on 2022-04-15 • Modified on 2022-04-15

This snippet shows how to check if a string contains another string with PHP. This is a kind of tribute to our "old" PHP. The str_contains() function was only introduced in PHP 8! Before, we had to do an ugly trick, as shown in the first example. Be careful that this new PHP 8 function is case sensitive. We can also use the Symfony String component, which allows choosing whether the search should be case sensitive. Once again, it is so elegant to use.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use function Symfony\Component\String\u;

/**
 * I am using a PHP trait to isolate each snippet in a file.
 * This code should be called from a Symfony controller extending AbstractController (as of Symfony 4.2)
 * or Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Services are injected in the main controller constructor.
 */
trait Snippet198Trait
{
    /**
     * @noinspection PhpStrFunctionsInspection
     */
    public function snippet198(): void
    {
        $haystack = 'Foobar is a good friend of mine!';
        $needle = 'friend';

        // old way
        if (strpos($haystack, $needle) !== false) {
            echo "strpos: YES, $haystack contains $needle!".PHP_EOL;
        }

        // PHP 8
        if (str_contains($haystack, $needle)) {
            echo "str_contains: YES, $haystack contains $needle!".PHP_EOL;
        }

        // Symfony String component
        if (u($haystack)->containsAny($needle)) {
            echo "Symfony string: YES, $haystack contains $needle!".PHP_EOL.PHP_EOL;
        }

        // the case doesn't match now...
        $needle = 'FrIenD';

        if (strpos($haystack, $needle) !== false) {
            echo "strpos: YES, $haystack contains $needle!";
        } else {
            echo "strpos: NO, $haystack does not contains $needle!".PHP_EOL;
        }

        if (str_contains($haystack, $needle)) {
            echo "str_contains: YES, $haystack contains $needle!".PHP_EOL;
        } else {
            echo "str_contains: NO, $haystack does not contains $needle!".PHP_EOL;
        }

        // we can ignore case with the String component!
        if (u($haystack)->ignoreCase()->containsAny($needle)) {
            echo "Symfony string: YES, $haystack contains $needle! (ignoring case)".PHP_EOL.PHP_EOL;
        }

        // That's it! 😁
    }
}

 Run this snippet  More on Stackoverflow   Read the doc  More on the web  Random snippet

  Work with me!