Skifte ut {TEXT} med $text

Jeg har denne koden

[PHP]
$nytt = “rent”;
$gammelt = “støvete”;
$tekst = “Alt nytt er {NYTT} og alt gammelt er {GAMMELT}”;
[/PHP]

Inne i $tekst så vil jeg skifte ut {NYTT} med $nytt, og {GAMMELT} med $gammelt.
Hvis $nytt er blank så skal {NYTT} skiftes ut med “pent”.
Hvis $gammelt er blank så skal {GAMMELT} skiftes ut med “slitt”.

Hvordan kan jeg gjøre det med php?

Her har du litt å se på, og søke opp diverse ting osv. Det bør være dagens lærdom i hvor mye rare ting PHP har innebygget.

[PHP]$nytt = “rent”;
$gammelt = “støvete”;
$tekst = “Alt nytt er {NYTT} og alt gammelt er {GAMMELT}”;
$tom = array(“nytt” => “pent”, “gammelt” => “slitt”);

$tekst = preg_replace_callback( “/{(NYTT|GAMMELT)}/”, “cb”, $tekst);

function cb($x) {
global $nytt, $gammelt, $tom;

$var = strtolower(isset($x[1]) ? $x[1] : "");
$ret = isset($$var) && !empty($$var) ? $$var : $tom[$var];

return $ret;

}[/PHP]

[PHP]
$nytt = “rent”;
$gammelt = “støvete”;
$tekst = “Alt nytt er {NYTT} og alt gammelt er {GAMMELT}”;

if (empty($nytt)) $nytt = ‘pent’;
if (empty($gammelt)) $gammelt = ‘slitt’;

$nytekst = str_replace(‘{NYTT}’, $nytt, str_replace(‘{GAMMELT}’, $gammelt, $tekst));

echo $nytekst . “\n”;
[/PHP]

Misliker litt functions kun for å behandle noe tekst, som altså skal kjøres sammen med array_map osv, så jeg ville skrevet noe som dette:

$nytt = “rent”;
$gammelt = “støvete”;

$tekst = “Alt nytt er {NYTT} og alt gammelt er {GAMMELT}”;
$rep = array(
‘{NYTT}’ => ($nytt == ‘’ ? ‘pent’ : $nytt),
‘{GAMMELT}’ => ($gammelt == ‘’ ? ‘slitt’ : $gammelt)
);
foreach( $rep as $s=>$r ) {
$tekst = str_replace( $s, $r, $tekst );
}

Takk for svar :slight_smile:

Hvilken av disse metodene bruker minst serverressurser og er kjappest?

Løsningen min over bruker veldig lite ressurser.

Ressurser skal du måle i timeforbruk i å skrive funksjonen og lese+forstå+tilpasse senere.
Det er veldig få ganger mikrosekundene dine sparer deg for penger eller er en forutsetning.
Programmerer-tid er dyrere enn CPU-tid.