Hallo!
Können Sie mir sagen, welche schneller ist :
strstr
($mystring, $findme);
ODER
strpos
($mystring, $findme);
ODER
alles andere
beim Finden des - ersten oder beliebigen - Auftretens eines Strings in einem anderen?
Spielt es sogar eine Rolle, wenn ich das Vorkommen in einem Modus ohne Berücksichtigung der Groß- und Kleinschreibung mit stristr()
überprüfe. ODER stripos()
?
In meinem Fall spielt es keine Rolle, in welcher exakten Position die gegebene Zeichenkette ist (falls vorhanden), oder wie oft sie in der anderen auftritt (falls vorhanden), die einzige wichtige Frage ist, ob sie überhaupt existiert andere Zeichenfolge.
Ich habe in verschiedenen Artikeln bereits einige Kommentare über Geschwindigkeitsunterschiede gefunden (zB auf php.net jemand sagt strstr () ist schneller für den Fall, dass es einen! == false check nach strpos gibt, aber jetzt kann ich nicht entscheiden, was wahr ist.
Wenn Sie bessere Methoden kennen, um einen String in einem anderen zu suchen, lassen Sie es mich wissen!
Vielen Dank für die relevanten Kommentare!
============
strpos
scheint an der Spitze zu sein, ich habe es getestet, indem ich ein paar Strings in 'The quick brown fox jumps over the lazy dog'
gefunden habe:
strstr
verwendet 0,48487210273743 Mikrosekunden für 1000000 Iterationen 'quick'
finden
strpos
verwendet 0.40836095809937 Mikrosekunden für 1000000 Iterationen 'quick'
finden
strstr
verwendet 0,45261287689209 Mikrosekunden für 1000000 Iterationen, die 'dog'
finden
strpos
verwendet 0.39890813827515 Mikrosekunden für 1000000 Iterationen 'dog'
finden
Aus den PHP-Dokumenten :
Hinweis:
Wenn Sie nur bestimmen möchten, ob a bestimmte Nadel tritt innerhalb auf Heuhaufen, benutze die schneller und weniger speicherintensive Funktion strpos () stattdessen.
Ich bin bereit, ihr Wort dafür zu nehmen:)
Der schnellere Weg ist:
%Vor%Die case insensitive Versionen sollten natürlich langsamer sein (mindestens 2x langsamer, erwarte ich).
strncmp()
/ substr()
kann möglicherweise besser funktionieren iff Sie überprüfen, ob $haystack
beginnt mit $needle
und wenn $haystack
sehr lang ist (& gt; Hunderte Zeichen oder so).
Siehe andere Benchmarks @ Ссылка (Suche nach strpos
).
Ein praktisches Beispiel, wo diese Art von Optimierungen (Art von) wichtig ist - Berechnung von Hashcases :
%Vor%Trickfrage. Sie machen zwei verschiedene Dinge. Einer gibt den Teilstring zurück, der andere gibt die Startposition des Teilstrings mit dem String zurück. Die wirkliche Antwort ist, dass Sie Äpfel mit Orangen vergleichen, welche Sie brauchen.
Ich würde denken, dass strpos()
schneller wäre, weil es nur eine ganze Zahl zurückgibt (oder false
, wenn keine Übereinstimmung gefunden wurde). strstr()
gibt eine Zeichenfolge zurück, die den gesamten Text nach und einschließlich der ersten Übereinstimmung enthält.
Für case-insensitive Suchvorgänge würde ich denken, dass diese etwas langsamer wären, weil sie zusätzliche Prüfungen durchführen müssen ("passen die zwei Zeichen überein? Wenn nein, ist das Zeichen ein Buchstabe? Wenn ja, stimmt es mit der Kleinbuchstabenversion überein ? Wenn nein, stimmt es mit der Großschreibung überein? ", usw.)