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

oy
11

Python sözlükleri kullanarak string değişimini ele bu harika bir yol 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 kez bir değer belirtin ve ardından tüm dizede yerde değiştirebilirsiniz çünkü bu aşk.

Çeşitli dize işlevlerini yerine ama ile geldim herşey garip hissediyor kullanarak PHP benzer bir şey elde etmeye çalıştım.

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

Düzenleme
Burada en beğendiğim sprintf sayfasından kod.

<?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'));
?>
Oluştur 26/08/2008 saat 15:20
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
1

Içinde kullanıcı katkısıyla notları ve işlevlerin bazıları sprintf için PHP'nin belgelerine oldukça yakın geliyor.

Not: "sprintf2" için sayfa arayın.

Cevap 26/08/2008 saat 15:30
kaynak kullanıcı

oy
5

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

Sen şöyle diyoruz:

echo subst('The %(site)s site %(adj)s because it %(adj)s', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
Cevap 26/08/2008 saat 15:49
kaynak kullanıcı

oy
4

@ Marius

Daha hızlı olursa bilmiyorum ama regexes olmadan yapabilirsiniz:

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

  return $str;
}
Cevap 26/08/2008 saat 16:21
kaynak kullanıcı

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