1

尽管我已经阅读了很多教程,但我还是 PHP 和数组的新手。请谅解。:)

我的意图: 对于全文搜索,我试图用包含在单词列表中的自定义其他单词替换字符串中的单词。我突然想到,为了将整个单词而不是找到的字符串作为另一个单词的一部分,我必须使用具有特定模式的 preg_replace() 而不是 str_replace()。

我的问题:如果某个单词是单词列表的一部分,即 [apples],我正在尝试将 ie [全文搜索中的短文本] 替换为 ie [全文搜索中的短苹果]。自然地,最终的字符串看起来像 [Short apples in a fullapples search] 或者我收到一些分隔符警告。

因此,我试图找出 preg_replace() 函数仅替换完整单词而不是组合单词中的字符串的模式。最重要的是,我将单词对从关联数组中提取出来,以便更好地了解列表。这是我是新手的地方。

我的试验:

$replacements = array(
                  'text' => 'apples',
                  etc…
                );

$pattern = '#\b'($searchterm)'\b#;
$searchterm = preg_replace(array_keys($replacements), $pattern, $searchterm);

echo $searchterm;

谢谢您的帮助!

4

1 回答 1

1

strtr可能足以完成这项任务。.

为了替换组合词中的完整词而不是字符串,我们可以简单地blank在替换对的末尾添加一个。

<?php
$replacements = array(
    'text' => 'apples',
);

$realRreplacements = array();
foreach ($replacements as $from => $to)
{
    $from = ' ' . $from . ' ';
    $to = ' ' . $to . ' ';
    $realRreplacements[$from] = $to;
}

$str = 'Short text in a fulltext search';
$str = strtr($str, $realRreplacements);
echo $str, "\n";
// output: Short apples in a fulltext search

-

                      ************ update *************

转回preg_replace

<?php
$list = array(
    'text' => 'apples',
    'Short' => 'Long',
    'search' => 'find',
);
$pattens = array();
$replacement = array();
foreach ($list as $from => $to)
{
    $from = '/\b' . $from . '\b/';
    $pattens[] = $from;
    $replacement[] = $to;
}
$str = 'Short text in a fulltext search';
$str = preg_replace($pattens, $replacement, $str);
echo $str, "\n"; // Long apples in a fulltext find
于 2013-07-23T01:50:51.083 回答