Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,按字符串顺序将随机值替换为特定值_Php_Regex_String - Fatal编程技术网

在PHP中,按字符串顺序将随机值替换为特定值

在PHP中,按字符串顺序将随机值替换为特定值,php,regex,string,Php,Regex,String,假设我有一个字符串: {{Hi}}, This {{is}} {{Debby}}. 我想用传递给函数的变量替换{{ANYTHING}中的文本。例如,如果函数为change\u values('Hola','was','Antonio') 结果将是: Hola, This was Antonio. 由{{}}包围的第一个单词或字符被change\u values()的第一个参数替换。类似地,第二个单词或字符被第二个参数替换,依此类推 需要明确的是,值Hi,为和Debby可以更改。传递的参数也可

假设我有一个字符串:

{{Hi}}, This {{is}} {{Debby}}.
我想用传递给函数的变量替换
{{ANYTHING}
中的文本。例如,如果函数为
change\u values('Hola','was','Antonio')

结果将是:

Hola, This was Antonio.
{{}}
包围的第一个单词或字符被
change\u values()
的第一个参数替换。类似地,第二个单词或字符被第二个参数替换,依此类推

需要明确的是,值
Hi
Debby
可以更改。传递的参数也可以更改。唯一一致的是第一个
{{}}
将被第一个参数替换,依此类推

我原本打算使用
str_replace()
,但每次文本都在不断变化。我还考虑过使用
regex
,但不知道如何按顺序进行替换

任何帮助都将不胜感激

再举几个例子

{{Fiona}} is a lucky {{girl}}.
将成为

Mike is a lucky man.

我在原始字符串中使用
{{}
作为标识符,以便于找出需要替换的内容。如果这会产生问题,我愿意接受其他(更好的)解决方案。

如果您使用的是PHP5.6或更高版本,此函数将满足您的需要。它用于将所有替换项打包到一个数组中,然后用替换项替换
{
}
包围的所有字符串。通过使用
limit
参数
preg_replace
,我们可以防止模式用
replacements
数组中的第一个值替换所有
{}
字符串

function change_values($string, ...$replacements) {
    return preg_replace(array_fill(0, count($replacements), '/{{[^}]+}}/'), $replacements, $string, 1);
}
echo change_values('{{Hi}}, This {{is}} {{Debby}}.', 'Hola', 'was', 'Antonio');
echo change_values('{{Fiona}} is a lucky {{girl}}.', 'Mike', 'man');
输出:

Hola, This was Antonio.
Mike is a lucky man.

如果您可以将查找和替换值定义为关联数组。谢谢@WiktorStribiżew,我将尝试一下。:)有一个问题,它使用关联数组修复了原始字符串中的值。
    $input = '{{Fiona}} is a lucky {{girl}}.';
    $replaceArray = ['Mike', 'man'];
    $expectedOut = 'Mike is a lucky man.';

    preg_match_all('/({{\w+}})/', $input,$matches);
    $out = str_replace($matches[0], $replaceArray, $input);

    if($out === $expectedOut){
        print_r($out);
    }