Position actuelle: Accueil> Derniers articles> Alternatives de recherche globale qui simulent les stripos

Alternatives de recherche globale qui simulent les stripos

M66 2025-05-31

Dans PHP, la fonction StripOS est généralement utilisée pour trouver où une chaîne apparaît d'abord dans une autre chaîne, et elle est insensible à la casse. Si vous souhaitez effectuer une recherche globale dans une chaîne, Stripos n'est pas une fonctionnalité directe, car elle ne renvoie que le premier emplacement d'occurrence.

Alors, comment devrions-nous simuler des stripos pour implémenter la recherche globale? Cet article explorera ce problème et fournira quelques alternatives pour implémenter des fonctionnalités similaires.

1. Simuler la recherche globale à l'aide de stripos et de substr

Pour simuler la recherche globale, nous pouvons utiliser StripOS et Substr pour combiner en trouvant constamment la position de correspondance suivante jusqu'à ce que la chaîne complète soit recherchée.

Voici un exemple de code qui simule la recherche globale:

 <?php
function globalStripos($haystack, $needle) {
    $offset = 0; // Commencez à rechercher à partir de la position de début de la chaîne
    $matches = []; // Utilisé pour enregistrer tous les emplacements correspondants

    while (($pos = stripos($haystack, $needle, $offset)) !== false) {
        $matches[] = $pos;
        $offset = $pos + 1; // Continuez à rechercher à partir du personnage suivant dans la position actuelle
    }

    return $matches;
}

$text = "This is a test string. Let's test stripos function.";
$needle = "test";

$result = globalStripos($text, $needle);
print_r($result); // Sortir toutes les positions correspondantes
?>

Dans cet exemple, la fonction GlobalStropos utilise Stripos pour trouver la position de chaque match et ajuste le paramètre de décalage de sorte que chaque fois qu'il commence à partir du caractère suivant de la dernière position correspondante, et stocke enfin toutes les positions correspondantes dans un tableau et des retours.

2. Alternative: utilisez preg_match_all

Si vous souhaitez utiliser une solution plus propre, envisagez d'utiliser la fonction preg_match_all de l'expression régulière. Cette fonction renvoie les informations de localisation de toutes les correspondances et permet des correspondances plus complexes.

Voici un exemple de code pour implémenter la recherche globale à l'aide de preg_match_all :

 <?php
function globalSearchWithPreg($haystack, $needle) {
    $pattern = '/' . preg_quote($needle, '/') . '/i'; // En utilisant des expressions régulières,'i' Les drapeaux indiquent insensible au cas
    preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE);

    $positions = [];
    foreach ($matches[0] as $match) {
        $positions[] = $match[1]; // Obtenez l&#39;emplacement de correspondance
    }

    return $positions;
}

$text = "This is a test string. Let's test preg_match_all function.";
$needle = "test";

$result = globalSearchWithPreg($text, $needle);
print_r($result); // Sortir toutes les positions correspondantes
?>

Dans cet exemple, PREG_MATCH_ALL renvoie un tableau contenant toutes les correspondances. Grâce au paramètre preg_offset_capture , preg_match_all renverra les informations de localisation du match, et nous pouvons extraire ces emplacements et les retourner.

3. Alternative: utilisez des variantes STRSTR ou STRPOS

Si vous ne souhaitez pas utiliser d'expressions régulières, STRSTR ou STRPOS sont également des alternatives viables. Bien que ces fonctions soient par défaut de trouver la première occurrence, vous pouvez également simuler la recherche globale en ajustant le point de départ de la recherche.

Voici un exemple utilisant STRSTR :

 <?php
function globalSearchWithStrstr($haystack, $needle) {
    $offset = 0;
    $matches = [];

    while (($pos = strstr(substr($haystack, $offset), $needle)) !== false) {
        $matches[] = $pos;
        $offset += strlen($pos) - strlen($needle) + 1; // Continuez à rechercher à partir de l&#39;emplacement suivant
    }

    return $matches;
}

$text = "This is a test string. Let's test strstr function.";
$needle = "test";

$result = globalSearchWithStrstr($text, $needle);
print_r($result); // Sortir toutes les sous-chaînes correspondantes
?>

Cette méthode utilise STRST pour trouver chaque correspondance, similaire à la simulation StripOS précédente.

Résumer

Il existe de nombreuses façons de simuler des stripos pour implémenter les fonctions de recherche globale, notamment en combinant Stripos avec substr , en utilisant preg_match_all pour effectuer une correspondance régulière ou en utilisant STRST et d'autres fonctions. Chaque méthode présente ses avantages et ses inconvénients, et il est très important de choisir une solution qui convient à votre scénario. Si une logique de correspondance plus complexe ou une correspondance de motifs flexible est nécessaire, l'utilisation d'expressions régulières est généralement le meilleur choix.