【问题标题】:PHP: Replace certain parts of string with array valuesPHP:用数组值替换字符串的某些部分
【发布时间】:2014-03-27 10:15:26
【问题描述】:

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

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

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

预期结果:

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

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

【问题讨论】:

  • 这就是我喜欢 StackOverflow 的原因,在这里我们有 4 个不同方法的答案!

标签: php regex arrays curly-brackets


【解决方案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);

【讨论】:

  • 如果我的数组值来自 $_POST 怎么办?
  • @010Pixel Wrap {{}} 到您的数组索引应该不难。
【解决方案2】:

试试这个:

<?
$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);
  }
}

【讨论】:

  • 我已经尝试过了,但我想要一些更简单的方法哈哈。谢谢:)
【解决方案3】:
$string = preg_replace('/{{([a-zA-Z\_\-]*?)}}/ie','$array',$str);

希望对你有帮助

【讨论】:

  • 使用e 修饰符,您可以在preg_replace 的替换部分使用任何PHP 表达式。
  • 你能给我看一个演示吗?它给了我一些错误。
  • /e 修饰符已弃用。请改用preg_replace_callback。
【解决方案4】:
$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);

【讨论】:

    【解决方案5】:

    使用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)
    */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 2018-04-08
      • 1970-01-01
      • 2018-07-14
      • 2017-07-14
      • 1970-01-01
      • 2017-08-30
      相关资源
      最近更新 更多