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'
);

我想用 $array 中的 name 值替换 {{name}}。如果 $array 中不存在大括号内的字符串,则让该字符串保持原样。

预期结果:

My name is 010 Pixel. I live in USA. I love to code. {{ops...}}

我对此感到担忧的原因是,当任何来自表单的值包含任何 {{field-name}} 时,它不应该被替换。我只想替换 $str 中设置的内容。

4

5 回答 5

3

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);
于 2014-02-25T09:39:11.333 回答
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);
  }
}
于 2014-02-25T09:40:30.153 回答
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);
于 2014-02-25T09:43:34.153 回答
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)
*/
于 2014-02-25T09:50:03.690 回答
0
$string = preg_replace('/{{([a-zA-Z\_\-]*?)}}/ie','$array',$str);

希望这可以帮助

于 2014-02-25T09:41:29.133 回答