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
由于 array_map 和 foreach 都在循环,我也添加了一个非循环版本。
我将 |
替换为 }|{
,然后在 |
上展开,这会在数组中留下大括号字符串。
$find = "lorem|ipsum";
$replstr = "{" . str_replace("|", "}|{", $find) ."}";
$find = explode('|', $find);
$replace = explode("|", $replstr);
$newString = str_replace($find, $replace, $str);
echo $newString;
这是我写的替代解决方案:
$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
我有输入文本来查找和替换由竖线分隔的单词。
例如,我需要找到 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
由于 array_map 和 foreach 都在循环,我也添加了一个非循环版本。
我将 |
替换为 }|{
,然后在 |
上展开,这会在数组中留下大括号字符串。
$find = "lorem|ipsum";
$replstr = "{" . str_replace("|", "}|{", $find) ."}";
$find = explode('|', $find);
$replace = explode("|", $replstr);
$newString = str_replace($find, $replace, $str);
echo $newString;
这是我写的替代解决方案:
$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