Tester si une chaîne contient une autre chaîne avec PHP
Publié le 15/04/2022 • Actualisé le 15/04/2022
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