dedlfix: Replace

Beitrag lesen

Hi!

Wo ist denn der Unterschied zwischen folgenden Funktionen
strtr()
str_replace()

Der Unterschied ist historisch und sehr marginal.

Ich sehe eher zwei Anwendungsfälle. str_replace tauscht beliebig lange Stringteile durch beliebig andere Stringteile aus. strtr() war wohl eher gedacht, um einzelne Zeichen zu übersetzen, beispielsweise zwischen zwei (1-Byte-)Kodierungen. Doch ...

strtr() überträgt einzelne Zeichen von Zeichenketten in andere:
strtr('äste, böller und büsche', 'äöü', 'aou');

... strtr() kennt auch eine zweite Aufrufvariante, die größere Stringteile ersetzen kann. Und dabei ist die Übergabe der Such- und Ergänzungsstrings in einem Array besser gelöst als bei str_replace() mit seinen zwei getrennten Arrays. Allerdings hat auch die Arbeitsweise von str_replace() ihre Berechtigung, denn mit einem einzelnen Array kann man zwar schön Ersetzungspaare abbilden, aber nicht wenn man eine ganze Liste von Teilstrings in nur einen einzelnen wandeln will.

Das kann str_replace() nicht.

Doch, das kann es auch, nur muss man da die Zeichen als Array-Elemente übergeben.

Es kommt auf den Anwendungsfall an - strtr() braucht man eigentlich nur sehr selten weil beim Ersetzen von Zeichenketten durch andere (oder mehreren durch mehrere andere) str_replace() wesentlich schneller ist.

Ach!? Eben schienst du nicht zu wissen, dass strtr() nicht nur Einzelzeichen bearbeitet und nun sprichst du doch von "Ersetzen von Zeichenketten"? Wenn du wirklich davon ausgehst, einzelne Zeichen zu ersetzen, so ist str_replace() nicht mit strtr() vergleichbar, denn es berücksichtigt beim Abarbeiten des Suchstring-Arrays bereits eingesetzte Teile nicht, strtr() hingegen schon.

(Beide Funktionen arbeiten nur mit 1-Byte-Codierung, weswegen sich "Zeichen" auch nur auf solche mit einem Byte beziehen.)

Lo!