Gå til innhold

regex + arraykey


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet

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.

Skrevet

kjempemessig!

Det løste problemet :thumbs:

 

Er ganske fersk på regulære uttrykk både i PHP og generellt, så jeg har ikke lært meg bruken av modifiers enda.

 

Uansett, tusen takk for hjelpen

 

mvh

Håkon

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...