我有类似的字符串
$string = "string_key::%foo%:%bar%";
, 和参数数组
$params = array("foo" => 1, "bar" => 2);
如何在 $string 模式中替换此参数?预期结果是
string_key::1:2
我有类似的字符串
$string = "string_key::%foo%:%bar%";
, 和参数数组
$params = array("foo" => 1, "bar" => 2);
如何在 $string 模式中替换此参数?预期结果是
string_key::1:2
首先,您需要重写$params
数组:
$string = "string_key::%foo%:%bar%";
$params = array("foo" => 1, "bar" => 2);
foreach($params as $key => $value) {
$search[] = "%" . $key . "%";
$replace[] = $value;
}
之后,您可以简单地将数组传递给str_replace()
:
$output = str_replace($search, $replace, $string);
就个人而言,我做了这个:
$string = "string_key::%foo%:%bar%";
$params = array("%foo%" => 1, "%bar%" => 2);
$output = strtr($string, $params);
您不必做任何其他事情,因为如果数组中有一些值或字符串不会被替换和忽略。
快速简单的模式替换方法。
我不确定对您来说最快的解决方案是什么(这取决于字符串大小和您将使用的替换值的数量)。
我通常使用这种函数来执行参数化替换。它使用preg_replace_callback
和 一个闭包来执行每个百分比括起来的单词的替换。
function replaceVariables($str, $vars)
{
// the expression '/%([a-z]+)%/i' could be used as well
// (might be better in some cases)
return preg_replace_callback('/%([^%]+)%/', function($m) use ($vars) {
// $m[1] contains the word inside the percent signs
return isset($vars[$m[1]]) ? $vars[$m[1]] : '';
}, $str);
}
echo replaceVariables("string_key::%foo%:%bar%", array(
"foo" => 1,
"bar" => 2
));
// string_key::1:2
更新
它与str_replace()
在没有相应替换的情况下找到百分比封闭值的情况下使用不同。
这一行决定了行为:
return isset($vars[$m[1]]) ? $vars[$m[1]] : '';
如果它'%baz%'
不是$vars
. 但是这个:
return isset($vars[$m[1]]) ? $vars[$m[1]] : $m[0];
将留'%baz%'
在你的最后一串。