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

时间:2018-07-19 16:35:59

标签: php arrays str-replace

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

字符串:

  

安乐死。 Amet ipsum doleram范例

$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}多勒坐着。 Amet {lorem | ipsum}   多列拉姆主义

我期望

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

2 个答案:

答案 0 :(得分:2)

您不能像这样破坏替代品。
您返回一个字符串的方式是,需要一个字符串数组。

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

new Date

输出:

$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;

https://3v4l.org/DOB2F


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

我将{lorem} {ipsum} doler sit amet. Amet {ipsum} doleram paradem 替换为|,然后在}|{上爆炸,这将大括号字符串留在数组中。

|

https://3v4l.org/E4O11

答案 1 :(得分:1)

这是我正在写的另一种解决方案:

$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