【问题标题】:How to replace {tag_INDEX} with array[INDEX] element如何用数组 [INDEX] 元素替换 {tag_INDEX}
【发布时间】:2011-02-23 14:45:50
【问题描述】:

我有这样的字符串;

“字符串 {tag_0} 文本 {tag_2} 和 {tag_1}”

现在我需要用数组中的元素替换所有 {tag_INDEX}

$myArray = array('a','b','c');

所以替换后应该是这样的:

"字符串 a 文本 c 和 b"

最好的方法是什么?我正在尝试使用 preg_replace 和 preg_replace_callback 但没有任何好的结果

【问题讨论】:

    标签: php arrays replace indexing


    【解决方案1】:

    不需要正则表达式:

    $s = "String {tag_0} text {tag_2} and {tag_1}";
    $myArray = array('a','b','c');
    
    $s = template_subst($s, $myArray);
    echo $s;
    
    // generic templating function
    function template_subst($str, &$arr) {
      foreach ($arr as $i => &$v) {
        $str = str_replace("{tag_$i}", $v, $str);
      }
      return $str;
    }
    

    【讨论】:

    • 出于好奇,为什么要通过引用传递数组?
    【解决方案2】:
    $newStr = preg_replace('/{tag_(\d+)}/e', '$myArray[\1]', $str);
    

    【讨论】:

    • 也不要忘记分配preg_replace 的结果,它不会像某些人通常认为的那样替换。
    • @Matthew,谢谢,我在答案中添加了一个作业,以防有人对此感到困惑
    【解决方案3】:

    在每次迭代中运行一个限制为 1 的迭代正则表达式,并用 $myArray[n] 替换您的表达式。

    【讨论】:

      猜你喜欢
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2022-06-17
      • 2019-10-14
      • 2017-04-28
      相关资源
      最近更新 更多