Das geht schon noch. Ich hatte eher Performancebedenken, da ich so ja jedes einzelne Zeichen durchgehe.
Immer erst bei Bedarf optimieren, nie vorab. Kümmere dich an erster Stelle um sauberen, wartbaren Code. Außerdem: wenn Du Bedenken hast, dann solltest Du messen. Dein 20-Zeichen String ist dafür allerdings zu klein. Mach mal ne große Menge draus und dann die Zeit messen. Ich bin mir ziemlich sicher, dass die RegExp-Variante bei hinreichend langen Strings sogar langsamer sein wird. Außerdem:
$pos = array( 5, 9, 12, 16, 21 ); // 5 Positionen $alt = 'qwertzuiopasdfghjklxcvbnm,'; $neu = ''; for ($i=0; $i < strlen($alt); $i++) { if (in_array($i, $pos)) { $neu .= '<span class="varpos">'.substr($alt, $i, 1).'</span>'; } else { $neu .= substr($alt, $i, 1); } }
Schaut mir nach einer sauberen und klaren Lösung der Aufgabenstellung aus. Gut so.
Meine jetztige Lösung finde ich irgendwie schöner:
$pos = array( 5, 9, 12, 16, 21 ); // 5 Positionen $sequence= 'qwertzuiopasdfghjklxcvbnm,'; for ($i = count($pos)-1; $i >= 0; $i--) { $sequence = substr_replace($sequence, "</span>", $pos[$i]+1, 0); $sequence = substr_replace($sequence, '<span class="varpos">', $pos[$i], 0); }
Deutlich schlechter, weil dramatisch weniger intuitiv lesbar. Die Lösung ist nerdiger und vermutlich langsamer. Außerdem:
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.