Php动态替换字符串中的占位符变量

时间:2017-07-25 11:29:44

标签: php

我想在字符串中动态替换占位符变量。

str_replace("\$", $data["Whatever follows the \$], $variable);

\$表示占位符变量,例如\$ID

我希望它替换的数据是在一个数组中。 $\ID应替换为$data['ID']

例如,如果我的字符串显示为" ID为\$ID且名称为\$name"。我想用我的$data对象中的相关数据替换\ $ ID和\ $ name。 $\ID将为$data['ID'],依此类推。

这需要是动态的。我不想对其进行硬编码以将\$ID替换为$data['ID']。用于获取$ data中数据的密钥应该等于\$之后的密钥。

我无法像我所说的那样动态地弄清楚如何动态地执行此操作,而是为字符串中的每个\$执行此操作。

3 个答案:

答案 0 :(得分:0)

使用printf()或sprintf()。

如果您使用数字标记占位符,则可以在字符串中重复多次。

sprintf("This is my test string. Here's a placeholder: %1$s, and a another: %2$s, First one again: %1$s", $var1, $var2);

答案 1 :(得分:0)

试试这个:

$string = 'some $ID $PARAM string';
$values = array("ID" => "idparam", "PARAM" => "p");

preg_match_all("/\\\$(?<name>[a-zA-Z0-9]+)/", $string, $matches);

foreach($matches["name"] as $m) {
    if(!isset($values[$m])) {
        //TODO handling
        continue;
    }
    $string = str_replace('$'.$m, $values[$m], $string);
}

var_dump($string);

$values中的键应该是没有美元符号的参数的名称。

答案 2 :(得分:0)

这将为您完成工作! https://3v4l.org/XRQii

<?php

$string = 'The ID is \$ID and name is \$name';
$row = [
  'ID'=> 5,
  'name' => 'delboy1978uk',
];


function replaceStuff($string, $row) {
    preg_match_all('#\\$\w+#', $string, $matches);
    foreach ($matches[0] as $match) {
        $key = str_replace('$', '', $match);
        $replace = '\\'.$match;
        $string = str_replace($replace, $row[$key], $string);
    }
    return $string;
}

echo replaceStuff($string, $row);

有关preg_match_all()的详细信息,请参阅http://php.net/manual/en/function.preg-match-all.php