PHP:用数组值替换字符串的某些部分

时间:2014-02-25 09:35:36

标签: php regex arrays curly-brackets

如果数组中存在特定字符串,我想替换字符串中的值。

$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中设置的内容。

5 个答案:

答案 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);

希望这可以提供帮助