Tester si une chaîne contient une autre chaîne avec PHP

Publié le 15/04/2022 • Mis à jour le 15/04/2022


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment tester si une chaîne contient une autre chaîne avec PHP. C'est un hommage à notre bon vieux PHP. La fonction str_contains() a seulement été introduite dans PHP 8 ! Avant, on devait utiliser ce code étrange comme montré dans le premier exemple. Attention, cette nouvelle fonction PHP 8 est sensible à la casse. On peut aussi utiliser le composant String de Symfony qui permet de choisir si l'on veut rendre la recherche sensible à la casse ou pas. Encore une fois, il est tellement élégant de l'utiliser.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use function Symfony\Component\String\u;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
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! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Plus sur le web  Snippet aléatoire