首页 > 解决方案 > PHP替换动态变量

问题描述

我正在以这种方式替换动态字符串并且它可以工作。

<?php
$data = 'wow@example.org|Foo|2019|....|x_Param';
$parts = explode("|", $data);

$text = 'Hello [-param_1-] Your email is [-param_0-]';
$new_text = str_replace('[-param_0-]', $parts[0], $text);
$new_text = str_replace('[-param_1-]', $parts[1], $new_text);
$new_text = str_replace('[-param_2-]', $parts[2], $new_text);
# .... param_X

echo $new_text;
# Out: Hello Foo Your email is wow@example.org

?>

如何改进它,我这样做的方式效率不高,如果有 9999.X 如何替换它..

我感谢您的帮助

Edi - 解决方案:

<?php
$data = 'wow@example.org|Foo|2019|....|x_Param';
$parts = explode("|", $data);

$text = 'Hello [-param_1-] Your email is [-param_0-]';

//$text = 'Hello [-param_1-] Your email is [-param_0-]';

$new_text = $text;
foreach($parts as $i => $part){
    $new_text = str_replace('[-param_'.$i.'-]', $part, $new_text);  
}

echo $new_text;


?>

标签: phpregex

解决方案


好吧,您可以只使用一个 str_replace,如下所示:

<?php
$data = 'wow@example.org|Foo|2019|....|x_Param';
$parts = explode("|", $data);

$text = 'Hello [-param_1-] Your email is [-param_0-]';
$params = ['[-param_0-]', '[-param_1-]', '[-param_2-]'];
$new_text = str_replace($params, $parts, $text);

echo $new_text;
# Out: Hello Foo Your email is wow@example.org

?>

是的,str_replace()将接受数组。

如果您有大量参数,您可以$params使用循环生成数组,但我个人会使用更有意义的东西。所以不是[-param_0-]我会拥有%%email%%,等等。


推荐阅读