PHP替代动态变量

PHP替代动态变量,php,regex,Php,Regex,我用这种方式替换动态字符串,它可以工作 <?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('[-p

我用这种方式替换动态字符串,它可以工作

<?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,如何替换它

我感谢你的帮助

电子数据交换-解决方案:

<?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;


?>

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

<?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

?>

是,将接受数组


如果有大量参数,可以使用循环生成
$params
数组,但我个人会使用更有意义的方法。因此,我将使用
%%email%%
,而不是
[-param\u 0-]
,诸如此类。

好的,您可以只使用一个str\u替换,如下所示:

<?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

?>
<?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;


?>

是,将接受数组

如果有大量参数,可以使用循环生成
$params
数组,但我个人会使用更有意义的方法。因此,我将使用
%%email%%
,而不是
[-param\u 0-]
,依此类推。


<?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;


?>


这看起来像是使用
%s
占位符而不是自定义的
[-param\u N]-
这看起来像是使用
%s
占位符而不是自定义的
[-param\u N]-
这只是另一种方法,但并没有效率,正如问题所说,如果我们有数百万的param_0..@Manix,这是相当有效的,证明我错了(我会第一个承认),而且我认为不会有数百万个参数。好吧,多次调用
str_replace()
比一次调用效率低。这只是另一种方法,但正如问题所说,效率也不高,如果我们有数百万个param_0..@Manix,这是非常有效的,证明我错了(我会第一个承认),我认为不会有数百万个参数。好吧,多次调用
str_replace()
比一次调用效率低。