effektives Ersetzen
Christian
- php
In den letzten Tagen bin ich zweimal über quasi das gleiche Problem gestolpert und weiß nicht recht, wie ich es effektiver lösen könnte.
Folgendes Szenario:
Einzelne Buchstaben eines Strings sollen, z.B. für ein Substitutions-Chiffre vertauscht werden. Meine erste Idee:
$substitution = array(
'|a|' => 'e',
'|b|' => 'g',
'|c|' => 'j',
...
'|[^a-z ]|i' => ''
);
$chiffriert = preg_replace(array_keys($substitution), array_values($substitution), $klartext);
Allerdings arbeitet preg_replace() nicht so, wie ich mir das wünschen würde. Wünschenswert wäre ja, dass jeder Buchstabe im String nacheinander angeschaut wird, ob er ein zu ersetzender Buchstabe ist. Stattdessen wird für jeden zu ersetzenden Buchstaben der komplette String einmal komplett analysiert, was auch dazu führt, dass bereits ersetzte Buchstaben nochmal ersetzt werden. Der mehrfache Schleifendurchlauf hört sich höchst uneffektiv an. Kennt ihr bessere/schnellere Alternativen?
Christian.
echo $begrüßung;
Einzelne Buchstaben eines Strings sollen, z.B. für ein Substitutions-Chiffre vertauscht werden.
Allerdings arbeitet preg_replace() nicht so, wie ich mir das wünschen würde. Wünschenswert wäre ja, dass jeder Buchstabe im String nacheinander angeschaut wird, ob er ein zu ersetzender Buchstabe ist. Stattdessen wird für jeden zu ersetzenden Buchstaben der komplette String einmal komplett analysiert, was auch dazu führt, dass bereits ersetzte Buchstaben nochmal ersetzt werden. Der mehrfache Schleifendurchlauf hört sich höchst uneffektiv an.
RegExp sind zwar mächtig, müssen sich dies aber auch irgendwie erkaufen. Spezialisiertere Funktionen für gängige einfache Aufgaben dürften effektiver arbeiten.
Kennt ihr bessere/schnellere Alternativen?
Ja, aber ohne Muster, nur mit feststehenden Suchstrings bietet sich strtr() in der zweiten Variante an.
echo "$verabschiedung $name";
Ja, aber ohne Muster, nur mit feststehenden Suchstrings bietet sich strtr() in der zweiten Variante an.
Super, genau sowas habe ich gesucht. Danke.
Christian