Preg replace met arrays

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark D

Mark D

24/09/2011 12:44:40
Quote Anchor link
Hey allemaal,

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
preg_replace('\{\$(.+?)\}', $this->tpl_vars['$1'], $tpl_contents)


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
 
PHP hulp

PHP hulp

17/04/2021 07:41:58
 
- SanThe -

- SanThe -

24/09/2011 13:21:18
Quote Anchor link
Preg_replace() is niet mijn sterke kant.

Hoe groot is het array()?
Dit zou ook moeten werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
foreach($tpl_vars as $key => $value)
{

    $tpl_contents = str_replace('{$' . $key . '}', $value, $tpl_contents);
}

?>
 
Mark D

Mark D

24/09/2011 13:28:57
Quote Anchor link
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 Brandt

Jacco Brandt

24/09/2011 13:34:14
Quote Anchor link
Je regex klopt sowieso niet, je bent de opening/sluiting-delimeter vergeten.
/\{(.+?)\}/
 
Mark D

Mark D

24/09/2011 13:41:11
Quote Anchor link
@Jacco, klopt helemaal. Maar nu het echte probleem nog xD
 
Jacco Brandt

Jacco Brandt

24/09/2011 14:36:56
Quote Anchor link
De enige oplossing die ik kan bedenken is een str_replace met arrays, maar dat werkt ook weer nét wat anders.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.