Hello,
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 ...
Der Unterschied liegt noch in der Abarbeitungshierarchie.
Str_Replace() im Array-Modus ist quasi-rekursiv. Das bedeutet, dass zuvor getauschte Sequenzen, wenn sie dann für nachfolgende noch zu tauschende wieder Treffer ergeben, erneut getauscht werden.
Eben das verhindert der Tauschalgorithmus von String-Translate ( = strtr() ).
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg