Aktueller Standort: Startseite> Neueste Artikel> Globale Suchalternativen, die Stripos simulieren

Globale Suchalternativen, die Stripos simulieren

M66 2025-05-31

In PHP wird die Stripos -Funktion normalerweise verwendet, um zu finden, wo eine Zeichenfolge zuerst in einer anderen Zeichenfolge erscheint, und sie ist unempfindlich. Wenn Sie eine globale Suche in einer Zeichenfolge durchführen möchten, ist Stripos keine direkt unterstützte Funktion, da sie nur den ersten Auftrittsort zurückgibt.

Wie sollten wir Stripos simulieren, um die globale Suche zu implementieren? In diesem Artikel wird dieses Problem untersucht und einige Alternativen zur Implementierung einer ähnlichen Funktionalität liefern.

1. Simulieren Sie die globale Suche mit Stripos und Substr

Um die globale Suche zu simulieren, können wir Stripos und Substr verwenden, um zu kombinieren, indem wir ständig die nächste Übereinstimmungsposition finden, bis die vollständige Zeichenfolge gesucht wird.

Hier ist ein Code -Beispiel, das die globale Suche simuliert:

 <?php
function globalStripos($haystack, $needle) {
    $offset = 0; // Suchen Sie aus der Startposition der Zeichenfolge aus
    $matches = []; // Wird verwendet, um alle passenden Standorte zu speichern

    while (($pos = stripos($haystack, $needle, $offset)) !== false) {
        $matches[] = $pos;
        $offset = $pos + 1; // Suchen Sie weiter vom nächsten Charakter in der aktuellen Position
    }

    return $matches;
}

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

$result = globalStripos($text, $needle);
print_r($result); // Alle übereinstimmenden Positionen ausgeben
?>

In diesem Beispiel verwendet die GlobalStripos -Funktion Stripos , um die Position jedes Spiels zu finden, und stellt den Offset -Parameter so ein, dass jedes Mal, wenn sie vom nächsten Charakter der zuletzt übereinstimmenden Position startet, und schließlich alle Matching -Positionen in einem Array speichert und zurückgegeben wird.

2. Alternative: Verwenden Sie preg_match_all

Wenn Sie eine sauberere Lösung verwenden möchten, sollten Sie die Funktion preg_match_all des regulären Ausdrucks verwenden. Diese Funktion gibt die Standortinformationen aller Übereinstimmungen zurück und ermöglicht komplexere Übereinstimmungen.

Hier ist ein Beispielcode für die Implementierung der globalen Suche mit preg_match_all :

 <?php
function globalSearchWithPreg($haystack, $needle) {
    $pattern = '/' . preg_quote($needle, '/') . '/i'; // Verwenden regelmäßiger Ausdrücke,'i' Flaggen geben den Fall unempfindlich an
    preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE);

    $positions = [];
    foreach ($matches[0] as $match) {
        $positions[] = $match[1]; // Holen Sie sich den passenden Standort
    }

    return $positions;
}

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

$result = globalSearchWithPreg($text, $needle);
print_r($result); // Alle übereinstimmenden Positionen ausgeben
?>

In diesem Beispiel gibt preg_match_all ein Array zurück, das alle Übereinstimmungen enthält. Durch den Parameter PRG_OFFSET_CAPTURE wird preg_match_all die Standortinformationen der Übereinstimmung zurück und wir können diese Positionen extrahieren und zurückgeben.

3. Alternative: Verwenden Sie STRSTR- oder STRPOS -Varianten

Wenn Sie keine regulären Ausdrücke verwenden möchten, sind STRSTR oder STRPOS auch einige praktikable Alternativen. Obwohl diese Funktionen standardmäßig das erste Ereignis finden, können Sie auch die globale Suche simulieren, indem Sie den Suchbegriff anpassen.

Hier ist ein Beispiel mit Smstr :

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

    while (($pos = strstr(substr($haystack, $offset), $needle)) !== false) {
        $matches[] = $pos;
        $offset += strlen($pos) - strlen($needle) + 1; // Suchen Sie weiter vom nächsten Standort aus
    }

    return $matches;
}

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

$result = globalSearchWithStrstr($text, $needle);
print_r($result); // Alle passenden Substrings ausgeben
?>

Diese Methode verwendet STSTR , um jede Übereinstimmung zu finden, ähnlich der vorherigen Stripos -Simulation.

Zusammenfassen

Es gibt viele Möglichkeiten, Stripos zu simulieren, um globale Suchfunktionen zu implementieren, einschließlich der Kombination von Stripos mit Substr , mithilfe von preg_match_all , um regelmäßig übereinstimmen, oder mit STRSTR und anderen Funktionen zu verwenden. Jede Methode hat ihre Vor- und Nachteile, und es ist sehr wichtig, eine Lösung auszuwählen, die zu Ihrem Szenario passt. Wenn komplexere passende Logik- oder flexible Musteranpassungen erforderlich sind, ist die Verwendung regulärer Ausdrücke normalerweise die beste Wahl.