PHP是否具有与此类Python字符串替换等效的功能?
时间:2020-03-05 18:43:19 来源:igfitidea点击:
Python具有使用字典处理字符串替换的出色方法:
>>> 'The %(site)s site %(adj)s because it %(adj)s' % {'site':'Stackoverflow', 'adj':'rocks'} 'The Stackoverflow site rocks because it rocks'
我喜欢这个,因为我们可以在字典中指定一次值,然后在字符串中的所有位置替换它。
我试图使用各种字符串替换函数在PHP中实现类似的功能,但是我想出的一切都感觉很尴尬。
有人在PHP中有一种干净的方法来进行这种字符串替换吗?
编辑
这是我最喜欢的sprintf页面中的代码。
<?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')); ?>
解决方案
回答
PHP的sprintf文档中的一些用户提供的注释和功能非常接近。
注意:在页面上搜索" sprintf2"。
回答
function subst($str, $dict){ return preg_replace(array_map(create_function('$a', 'return "/%\($a\)s/";'), array_keys($dict)), array_values($dict), $str); }
我们这样称呼它:
echo subst('The %(site)s site %(adj)s because it %(adj)s', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
回答
马里乌斯(Marius)
我不知道它是否更快,但是我们可以不使用正则表达式来完成它:
function subst($str, $dict) { foreach ($dict AS $key, $value) { $str = str_replace($key, $value, $str); } return $str; }