dedlfix: Alternative zu sprintf gesucht

Beitrag lesen

Tach!

Liebe Kinder, wenn ihr das zu Hause nachbauen wollt, könnt ihr noch folgende Bemerkungen berücksichtigen.

function GetTemplateReplace($arTemplate) {
if(!isset($arTemplate['TemplateFile'])) {
die ('Fatal: $arTemplate['TemplateFile'] ist nicht gesetzt!'."\n");
}
$template=file_get_contents($arTemplate['TemplateFile']);

Ein Script beim kleinsten Fehler sterben zu lassen ist keine gute Idee. Zudem solltet ihr noch eine wichtigere Prüfung einbauen, die nach der Existenz oder besser der Lesbarkeit der Datei - oder $template auswerten, ob es mit einem false einen Zugriffsfehler signalisiert.

$keys=array_keys($arTemplate);
foreach ($keys as $key) {
if ($key != 'TemplateFile') {
$replace[]=$arTemplate[$key];
$search[]='%%%'.$key.'%%%';
}
}
return str_replace($search, $replace, $template);

Alternative:
Man muss nicht erst die Array-Keys ermitteln, das hat foreach bereits eingebaut. Ich würde ja den Template-Dateinamen als Extra-Parameter übergeben und nicht mit den Nutzdaten mixen [*]. Ansonsten braucht es hier noch ein unset($arTemplate['TemplateFile']);

$search = array();  
foreach ($arTemplate as $key => $content)  
	$search[] = '%%%'.$key.'%%%';  
return str_replace($search, $arTemplate, $template);

Das $replace-Array kann ruhig irgendwelche Keys enthalten, die stören nicht. Man braucht sie also nicht extra zu behandeln und kann $arTemplate direkt verwenden.
Statt foreach kann man auch mit array_map() und einer selbst geschriebenen Funktion (seit PHP 5.3 kann sie auch anonym sein) arbeiten.

[*] Damit wird auch die erste Prüfung nach dem Vorhandensein des Schlüssels überflüssig.

dedlfix.