PHP Python dizge ikame bu tür bir eşdeğer var mı?

3 Cevap php

Python sözlükleri kullanarak string değişimini ele bu harika bir yolu vardır:

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

Eğer sözlükte bir kez değerini belirtmek ve sonra dize yere tüm değiştirebilirsiniz, çünkü bu aşk.

Ben işlevleri yerine değişik bir dize kullanarak PHP benzer bir şey elde etmek için denedim ama ben geldim her şey garip hissediyor.

Herkes PHP dize ikame bu tür yapmak için bir güzel temiz bir yolu var mı?

Edit
Here's the code from the sprintf page that I liked 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'));
?>

3 Cevap

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

Bunu şöyle diyoruz:

echo subst('The %(site)s site %(adj)s because it %(adj)s', array('site'=>'Stackoverflow', 'adj'=>'rocks'));

@ Marius

Daha hızlı eğer ben bilmiyorum, ama regexes olmadan bunu yapabilirsiniz:

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

  return $str;
}

Kullanıcı-katkıda notları ve fonksiyonların bazı PHP's documentation for sprintf oldukça yakın geliyor.

Not: "sprintf2" için sayfayı arama.