如何替换字符串中的占位符

时间:2021-02-01 16:07:36

标签: php

我想使用 PHP(无 JavaScript)将占位符替换为给定的字符串。

为此,我有一个可能的占位符列表和每个占位符的新字符串:

$placeholder=array( 'firstplaceholder'=>'new text for ph1',
'2ndplaceholder'=>'new text for ph2',
'3placeholder'=>'new text for ph3',
'4placeholder'=>'new text for ph4'
...

以及带有占位符的字符串

$string='This is my text, here I want to use {2ndplaceholder}";

通常我会这样做:

foreach($placeholder as $k=>$e)
{
if(strpos ( $string , $k){ $string=str_replace('{'.$k.'}',$e,$string);
}

现在我想到了运行时。如果我有一个很大的占位符列表,那么检查字符串中是否有占位符并替换它们而不是循环每个占位符(如果我只需要其中的几个)更有意义。

如何制作它或者如何从包含字符串中所有占位符的字符串创建一个数组,只循环它们?

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是在 key 中使用 valuestr_replace,但您需要在占位符上使用花括号,以便它们匹配。

$placeholder=array( '{firstplaceholder}'=>'new text for ph1',
'{2ndplaceholder}'=>'new text for ph2',
'{3placeholder}'=>'new text for ph3',
'{4placeholder}'=>'new text for ph4');
echo str_replace(array_keys($placeholder), $placeholder, 'This is my text, here I want to use {2ndplaceholder}');

$placeholder=array( '{firstplaceholder}'=>'new text for ph1',
'{2ndplaceholder}'=>'new text for ph2',
'{3placeholder}'=>'new text for ph3',
'{4placeholder}'=>'new text for ph4');
echo str_replace(array_keys($placeholder), array_values($placeholder), 'This is my text, here I want to use {2ndplaceholder}');

if array_values 函数更容易阅读。 str_replace 本身使用这些值,因此不需要它。

答案 1 :(得分:0)

现在我找到了解决这个工作的更快方法

$newstring=preg_replace_callback('/{([A-Z0-9_]+)}/',
        function( $matches ) use ( $placeholders )
        {
            $key = strtolower( $matches[ 1 ] );
            return array_key_exists( $key, $placeholders ) ? $placeholders[ $key ] : $matches[ 0 ];        
        },            
        $string
    );