PHP:查找模式中出现的所有事件,并用不同的值替换每个事件


PHP : find all occurrences inside pattern and replace each one with different value

我有一个字符串,如下所示:

Hello my name is [foo], I'm from [foo] 

然后我声明一个数组:

$foo = array('Sam', 'Tunisia');

我如何找到文本中所有出现的[foo],并将第一个替换为$foo[0],第二个替换为$foo[1]。。。结果应该是这样的:

 Hello my name is Sam, I'm from Tunisia

PS:我必须使用相同的模式[foo]

根据@Rizer123的建议,使用preg_replace_callback()。例如:

<?php
$str = "Hello my name is [foo], I'm from [foo]";
$foo = ['Sam', 'Tunisia'];
// note: passing `$foo` by reference. This allows you to
// unshift entries for each match. If there are more matches
// in `$str` than elements in the `$foo` array, `array_shift()`
// will simply return `null`
echo preg_replace_callback('/'[foo']/', function() use (&$foo) {
    return array_shift($foo);
}, $str);

收益率:

你好,我叫Sam,我来自突尼斯

有关更多阅读,请参阅的PHP文档

  • 匿名函数和use语言构造(示例#3)
  • array_shift()

希望这有帮助:)