我是PHP和Arrays的新手,尽管我已经读了很多教程。请谅解。:)
我的意图:对于全文搜索,我正在尝试将字符串中的单词替换为单词列表中包含的自定义其他单词。我突然想到,为了获得整个单词而不是找到的字符串作为另一个单词的一部分,我必须使用具有特定模式的 preg_replace(( 而不是 str_replace((。
我的问题:如果某个单词是单词列表的一部分,即[苹果],我正在尝试将[全文搜索中的短文本]替换为[全文搜索中的短苹果]。当然,最后一个字符串看起来像[全苹果搜索中的短苹果],或者我收到一些分隔符警告。
所以我试图找出 preg_replace(( 函数的一种模式,只替换完整的单词,而不是组合单词中的字符串。最重要的是,我将单词对从关联数组中提取出来,以便更好地概述列表。这就是我新手的地方。
我的试验:
$replacements = array(
'text' => 'apples',
etc…
);
$pattern = '#'b'($searchterm)''b#;
$searchterm = preg_replace(array_keys($replacements), $pattern, $searchterm);
echo $searchterm;
感谢您的帮助!
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