Christian: effektives Ersetzen

Beitrag lesen

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.