如果数组中存在特定字符串,我想替换字符串中的值。
$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';
$array = array(
'name' => '010 Pixel',
'city' => 'USA',
'hobby' => 'code',
'email' => 'xyz@abc.com'
);
我想用$ array中的name值替换{{name}}。如果$ array中不存在大括号内的字符串,那么让该字符串保持原样。
预期结果:
My name is 010 Pixel. I live in USA. I love to code. {{ops...}}
我担心这一点的原因是,当来自表单的任何值包含任何{{field-name}}时,它不应该被替换。我想只替换$ str中设置的内容。
答案 0 :(得分:1)
有 strtr 功能。
$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';
$array = array(
'{{name}}' => '010 Pixel',
'{{city}}' => 'USA',
'{{hobby}}' => 'code',
'{{email}}' => 'xyz@abc.com'
);
echo strtr($str, $array);
答案 1 :(得分:1)
试试这个:
<?
$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';
$array = array(
'name' => '010 Pixel',
'city' => 'USA',
'hobby' => 'code',
'email' => 'xyz@abc.com'
);
if (preg_match_all("/{{(.*?)}}/", $str, $m)) {
foreach ($m[1] as $i => $varname) {
$str = str_replace($m[0][$i], $array[$varname], $str);
}
}
答案 2 :(得分:1)
$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';
$array = array(
'name' => '010 Pixel',
'city' => 'USA',
'hobby' => 'code',
'email' => 'xyz@abc.com'
);
$callback = function($match) use ($array) {
if (array_key_exists($match[1], $array)) {
return $array[$match[1]];
} else {
return $match[0];
}
};
$str = preg_replace_callback('/\{\{(.*?)\}\}/', $callback, $str);
答案 3 :(得分:1)
使用preg_replace_callback有效 -
$str = 'My name is {{name}}. I live in {{city}}. I love to {{hobby}}. {{ops...}}';
$array = array(
'name' => '010 Pixel',
'city' => 'USA',
'hobby' => 'code',
'email' => 'xyz@abc.com'
);
$res = preg_replace_callback('/\{{2}(.*?)\}{2}/',
function($matches)use($array){
$key = $matches[1];
if(isset($array[$key])){
return "{{".$array[$key]."}}";
};
return $matches[0];
},
$str);
var_dump($res);
/*
OUTPUT-
string 'My name is {{010 Pixel}}. I live in {{USA}}. I love to {{code}}. {{ops...}}' (length=75)
*/
答案 4 :(得分:0)
$string = preg_replace('/{{([a-zA-Z\_\-]*?)}}/ie','$array',$str);
希望这可以提供帮助