Preg replace met arrays
Ik ben atm bezig met het schrijven van een basic frameworkje. Inmiddels ben ik aangeland op het schrijven van de template parser.
In het template staan 'tags' in de volgende vorm: {$variabele}. Verder zit er in mijn template class een member array, in de volgende vorm: $tpl_vars = array('variabele' => 'waarde'). Nu wil ik deze tag vervangen door de onhoud van $tpl_vars['variabele']. Hiertoe heb ik de volgende simpele preg_replace:
Jullie zien waarschijnlijk al snel dat dit niet gaat werken, omdat er geen key $1 in de tpl_vars array zit. Maar nu mijn vraag: hoe vervang ik de tag door de waarde in de goede array_key? Als je vervangt door een string kan je gewoon $1 of \\1 gebruiken, maar dit werkt nu natuurlijk niet. Heeft iemand ideeen hoe dit is op te lossen?
Alvast bedankt,
Mark
Gewijzigd op 24/09/2011 12:45:15 door Mark D
Hoe groot is het array()?
Dit zou ook moeten werken:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
foreach($tpl_vars as $key => $value)
{
$tpl_contents = str_replace('{$' . $key . '}', $value, $tpl_contents);
}
?>
foreach($tpl_vars as $key => $value)
{
$tpl_contents = str_replace('{$' . $key . '}', $value, $tpl_contents);
}
?>
Een typische grootte is rond de 50 keys, niet echt veel dus. En ik kan idd ook met str_replace werken voor deze toepassing, nog niet aan gedacht. Ik wil alleen later wil ik ook hetzelfde principe toepassen op andere tags, waarvoor ik look forwards en look backwards operators voor nodig heb. En dan zit ik aan preg_replace vast helaas... Ik kan dus voorlopig wel even verder, maar straks ga ik weer tegen hetzelfde probleem aanlopen.
/\{(.+?)\}/
@Jacco, klopt helemaal. Maar nu het echte probleem nog xD
De enige oplossing die ik kan bedenken is een str_replace met arrays, maar dat werkt ook weer nét wat anders.