strtr vs str_replace: Wann unterschiedliche Ersetzungsfunktionen verwendet werden sollten
In PHP können sowohl die Funktionen strtr als auch str_replace String-Ersetzungen durchführen. Die Auswahl der richtigen Funktion hängt jedoch von den spezifischen Anforderungen und Anwendungsfällen ab.
Kontrast in der Ersatzreihenfolge
Während die resultierende Ausgabe in einigen Fällen identisch erscheinen kann, gibt es eine subtiler Unterschied zwischen den beiden Funktionen:
echo strtr('test string', 'st', 'XY'); // "YeXY XYring" echo str_replace(array('s', 't'), array('X', 'Y'), 'test string'); // "YeXY XYring"
strtr ersetzt Teilzeichenfolgen von rechts nach links, während str_replace von links nach rechts ersetzt. Dieser Unterschied wird deutlich, wenn überlappende Teilzeichenfolgen ersetzt werden:
echo strtr('1 2 3 3', '1 2 3', 'XYZ'); // "1 2 3 Z" echo str_replace(array('1 2 3', '1 2'), array('XYZ', 'AB'), '1 2 3 3'); // "ABXYZ"
Ersetzen von Array-Schlüsseln im Vergleich zu mehreren Teilzeichenfolgen
Ein weiterer Unterschied liegt in der Art und Weise, wie Ersetzungsarrays behandelt werden:
$arr = array("1" => "A", "2" => "B", "3" => "C"); echo strtr('123', $arr); // "ABC" echo str_replace(array_keys($arr), array_values($arr), '123'); // "ABC"
In diesem Fall ersetzen beide Funktionen Zeichen durch ihre entsprechenden Array-Werte. Allerdings erfordert strtr ein assoziatives Array mit Schlüssel-Wert-Paaren, während str_replace mit einfachen Arrays von Teilzeichenfolgen und Ersetzungen arbeiten kann.
Ersetzungspriorität
strtr priorisiert Ersetzungen basierend auf die Länge des zu ersetzenden Teilstrings, absteigende Reihenfolge. Im Gegensatz dazu verarbeitet str_replace Ersetzungen in der im Ersetzungsarray definierten Reihenfolge. Dies kann zu unterschiedlichen Ergebnissen führen, wie das folgende Beispiel zeigt:
$text = "PHP: Hypertext Preprocessor"; $text_strtr = strtr($text, array("PHP: Hypertext Preprocessor" => "PHP", "PHP" => "PHP: Hypertext Preprocessor")); $text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor"), array("PHP: Hypertext Preprocessor", "PHP"), $text); var_dump($text_strtr); // string(3) "PHP" var_dump($text_str_replace); // string(27) "PHP: Hypertext Preprocessor"
Zusammenfassend lässt sich sagen, dass sowohl strtr als auch str_replace unterschiedliche Ansätze zum Ersetzen von Zeichenfolgen in PHP bieten. Das Verständnis ihrer subtilen Verhaltens- und Syntaxnuancen wird Ihnen bei der Auswahl der geeigneten Funktion für Ihren spezifischen Anwendungsfall helfen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3