PHP:查找模式中的所有实例并用不同的值替换每个实例

时间:2015-12-09 11:07:25

标签: php regex

我有一个像这样的字符串:

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]

1 个答案:

答案 0 :(得分:3)

根据@ 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文档:

希望这会有所帮助:)