PHP 查找并替换由管道符号分隔的输入文本给出的多个单词

PHP find and replace multiple words given by input text separated by pipe symbol

我有输入文本来查找和替换由竖线分隔的单词。
例如,我需要找到 lorem 和 ipsum。
所以我用管道 (|) 分开并将 lorem|ipsum 放在 $_POST['find'] 上以替换为 {lorem} 和 {ipsum} 之类的东西。

字符串:

lorem ipsum doler sit amet. Amet ipsum doleram paradem

$find = $_POST['find']; //user want to search lorem|ipsum
$find = explode('|', $find); // to array
$replace = '{'.implode('|', $find).'}'; // i expect soething like array('{lorem}','{ipsum}');
$newString = str_replace($find, $replace, $string);

输出

{lorem|{lorem|ipsum}} {lorem|ipsum} doler sit amet. Amet {lorem|ipsum} doleram paradem

我期待的

{lorem} {ipsum} doler sit amet. Amet {ipsum} doleram paradem

你不能那样破坏替代品。
你做 returns 一个字符串的方式,你需要的是一个字符串数组。

循环或array_map查找并添加花括号是您所需要的。

$str = "lorem ipsum doler sit amet. Amet ipsum doleram paradem";

$find = "lorem|ipsum";
$find = explode('|', $find);
foreach($find as $f){
    $replace[] = "{" . $f . "}";
}

$newString = str_replace($find, $replace, $str);
echo $newString;

输出:

{lorem} {ipsum} doler sit amet. Amet {ipsum} doleram paradem

https://3v4l.org/DOB2F


由于 array_map 和 foreach 都在循环,我也添加了一个非循环版本。

我将 | 替换为 }|{,然后在 | 上展开,这会在数组中留下大括号字符串。

$find = "lorem|ipsum";
$replstr = "{" . str_replace("|", "}|{", $find) ."}";
$find = explode('|', $find);

$replace = explode("|", $replstr);

$newString = str_replace($find, $replace, $str);
echo $newString;

https://3v4l.org/E4O11

这是我写的替代解决方案:

$input = 'lorem|ipsum';
$string = 'lorem ipsum doler sit amet. Amet ipsum doleram paradem';

// We get the words to replace
$find = explode('|', $input);

// We make sure the user didn't enter a word twice, (something like: lorem|lorem)
$find = array_unique($find);

// Prepare the replacement
$replace = array_map(function ($item) {
    return '{'.$item.'}';
}, $find);

// Finally do the replacement
$result = str_replace($find, $replace, $string);

echo $result; // {lorem} {ipsum} doler sit amet. Amet {ipsum} doleram paradem