Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php动态替换字符串中的占位符变量_Php - Fatal编程技术网

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

Php动态替换字符串中的占位符变量,php,Php,我想动态替换字符串中的占位符变量 str_replace("\$", $data["Whatever follows the \$], $variable); \$表示占位符变量,例如\$ID 我希望用其替换的数据位于数组中$\ID应替换为$data['ID'] 例如,如果我有一个字符串,上面写着“ID是\$ID,name是\$name”。我想用我的$data对象中的相关数据替换\$ID和\$name$\ID将是$data['ID']等等 这需要是动态的。我不想硬编码它,用$data['ID'

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

str_replace("\$", $data["Whatever follows the \$], $variable);
\$
表示占位符变量,例如
\$ID

我希望用其替换的数据位于数组中
$\ID
应替换为
$data['ID']

例如,如果我有一个字符串,上面写着“ID是
\$ID
,name是
\$name
”。我想用我的
$data
对象中的相关数据替换\$ID和\$name
$\ID
将是
$data['ID']
等等

这需要是动态的。我不想硬编码它,用
$data['ID']
替换
\$ID
。用于获取$data中数据的键应等于
\$
后面的值

我不知道如何像前面提到的那样动态执行此操作,也不知道如何为字符串中的每个
\$
执行此操作。

使用printf()或sprintf()

str_replace("\$", $data["Whatever follows the \$], $variable);
如果用数字标记占位符,则可以在字符串中重复任意次数

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

$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);
$string='some$ID$PARAM string';
$values=array(“ID”=>“idparam”、“PARAM”=>“p”);
预匹配所有(“/\\$(?[a-zA-Z0-9]+)/”,$string,$matches);
foreach($matches[“name”]as$m){
如果(!isset($values[$m])){
//待办事项处理
继续;
}
$string=str_replace(“$”.$m,$value[$m],$string);
}
变量转储($string);

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

这将为您完成任务


为什么不使用printf?