带有php变量的str_replace $ v *

时间:2016-11-25 10:22:27

标签: php

我在html中得到了一些像这样的文字

<p>Test test test $v1 $v2 $v3 $v11</p>

使用PHP我需要替换$ v1 $ v2 $ v3 ... $ v9,我不需要替换$ v10 ... $ v *****

我的问题是,当我的文字中有$ v11时,它最终会替换$ v1 + 1:

$v1 = "here";
...
What I got actually : Test test test $v11 => Test test test here1
I need :Test test test $v11 => Test test test

$ vars是PHP中的一个数组:

$v1 = "here";
$v2 = "";
$v3 = "";
$v4 = "";
$v5 = "";
$v6 = "";
$v7 = "";
$v8 = "";
$v9 = "";
$vars = array($v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9);

我的功能

function replaceVar($vars, $string)
{
  $stringReplace = '$v';
  $i = 1;
  while ($i <= 9) {
    if(!empty($vars[$i]) && strlen($stringReplace . $i) == 3)
    {
      $string = str_replace('$v' . $i, $vars[$i], $string);
    }
    else
    {
      $string = str_replace('$v' . $i, "", $string);
    }
    $i++;
  }
  return $string;
}

例外输出: $ vars是PHP中的一个数组:

$v1 = "here";
$v2 = "";
$v3 = "";
$v4 = "";
$v5 = "";
$v6 = "";
$v7 = "";
$v8 = "";
$v9 = "";
$vars = array($v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9);

echo replaceVar($vars, "Test test test $v1 $v2 $v11");

这里测试测试

2 个答案:

答案 0 :(得分:1)

您可以使用preg_replace_callback。请尝试以下

<?php
 $str = '<p>Test test test $v1 $v2 $v3 $v11</p>';

$v1 = "here";
$v2 = "";
$v3 = "";
$v4 = "";
$v5 = "";
$v6 = "";
$v7 = "";
$v8 = "";
$v9 = "";
$vars = array($v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9);

echo preg_replace_callback('/\$v(\d)\s/', 
       function($match) use ($vars) { return ($vars[$match[1]-1]) . ' '; },
       $str);

注意:return ($vars[$match[1]-1]) -1就在那里,因为$vars数组中的第0个元素实际上是$v1

Demo Here

注意:我假设&v1之后有空格,否则您可能需要更改匹配和替换。

说明:

'/\$v(\d)\s/' 匹配$ v和一个数字和一个空格

return ($vars[$match[1]-1]) . ' '

每个匹配的

返回$vars数组中索引匹配值为1的元素。因此,如果(\d)与1匹配,则会返回$vars[1-1]

答案 1 :(得分:0)

替换你的HTML
<p>Test test test %s %s %s</p>

然后你只需要

echo vsprintf($string, [$v1, $v2, $v3]);