Gå til innhold

regex + arraykey


Anbefalte innlegg

Hei sliter med et problem rundt en preg_replace og array keys.

 

jeg har følgende kodesnutt som er en del av en template engine jeg er nesten ferdig med å lage

foreach($this->variables as $variable => $content)
 	{
   	if(!is_array($content))
   	{
     // behandle variabler som vanlig
$this->template_file = preg_replace("/\{$variable\}/",$content,$this->template_file);
   	}
   	else
   	{
     // om det er et dobbelt array i $this->variables, så skal denne behandles her
     $this->template_file = preg_replace("/\{$variable\[(.*?)\]\}/",$content["\$1"],$this->template_file);
   	}
 	}

 

som dere ser, så er dette en kodesnutt som bytter ut {noe} - tagger i templatene med de variablene som er assignet i sourcekoden som lages.

De blir assignet slik:

array("var" => "variabel innholdet")

 

jeg prøver å få til slik at jeg kan assigne hver og enkelt array key om jeg assigner et dobbelt array som følger:

array("variabel" => array(0 => "null",1 => "en", 2 => "to"))

taggene som skal replaces i templaten ser lik ut: {variabel[0]} {variabel[1]} {variabel[2]}

 

Jeg har _nesten_ fått det til, men det er noe rot med regexen..

$this->template_file = preg_replace("/\{$variable\[(.*?)\]\}/",$content["\$1"],$this->template_file);

når jeg kjører denne koden, så kommer det KUN ut første verdi, altså 'null'.

Hvis jeg forandrer til:

$this->template_file = preg_replace("/\{$variable\[(.*?)\]\}/","$1",$this->template_file);

så blir keyene listet opp.. så hvorfor fungerer det ikke når jeg prøver med $content["\$1"]?

 

Har prøvd alt av muligheter, med og uten escaping osv.. Men jeg får det ikke til uansett hva jeg gjør .. :(

Må jeg angripe dette på en annen måte eller er det faktisk mulig?

 

Håper problemstillingen min var greit nok forklart..

 

mvh

Håkon

Lenke til kommentar
Videoannonse
Annonse

Det er faktisk mulig.

prøv:

<?php
$this->template_file = preg_replace("/\{$variable\[(.*?)\]\}/e",'$content["$1"]',$this->template_file);
?>

Legg merke til /e modifieren. Den gjør at replacement string blir evaluert som php kode.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...