Har PHP har en tilsvarende denne type Python streng substitusjon?

stemmer
11

Python har denne fantastiske måten å håndtere streng erstatninger ved hjelp av ordbøker:

>>> 'The %(site)s site %(adj)s because it %(adj)s' % {'site':'Stackoverflow', 'adj':'rocks'}
'The Stackoverflow site rocks because it rocks'

Jeg elsker dette fordi du kan angi en verdi en gang i ordboken og sett den over alt i strengen.

Jeg har prøvd å få til noe lignende i PHP ved hjelp av ulike strengen erstatte funksjonene, men alt jeg har kommet opp med føles vanskelig.

Er det noen som har en fin ren måte å gjøre denne typen streng substitusjon i PHP?

Edit
Her er koden fra sprintf siden som jeg likte best.

<?php

function sprintf3($str, $vars, $char = '%')
{
    $tmp = array();
    foreach($vars as $k => $v)
    {
        $tmp[$char . $k . $char] = $v;
    }
    return str_replace(array_keys($tmp), array_values($tmp), $str);
}

echo sprintf3( 'The %site% site %adj% because it %adj%', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
?>
Publisert på 26/08/2008 klokken 14:20
kilden bruker
På andre språk...                            


3 svar

stemmer
5

function subst($str, $dict){
    return preg_replace(array_map(create_function('$a', 'return "/%\\($a\\)s/";'), array_keys($dict)), array_values($dict), $str);
 }

Du kaller det slik:

echo subst('The %(site)s site %(adj)s because it %(adj)s', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
Svarte 26/08/2008 kl. 14:49
kilden bruker

stemmer
4

@ Marius

Jeg vet ikke om det er raskere, men du kan gjøre det uten regexes:

function subst($str, $dict)
{
  foreach ($dict AS $key, $value)
  {
    $str = str_replace($key, $value, $str);
  }

  return $str;
}
Svarte 26/08/2008 kl. 15:21
kilden bruker

stemmer
1

Noen av de brukerskapte notater og funksjoner i PHP dokumentasjon for sprintf kommer ganske nær.

Merk: søke på siden for "sprintf2".

Svarte 26/08/2008 kl. 14:30
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more