我正在尝试从数据库进行预览,并希望在关键字之前和之后使用20个单词进行预览。我可以想到几种方法来做到这一点,但似乎它会很难用于服务器。
一种方法是使用str_word_count()
将数据分解为单词数组,然后搜索数组,查找单词索引,并进行数学计算,但看起来它似乎太难以击中服务器
有更好的方法吗?
“20”只是一个例子,并且会捕获小于20的长度,所以我知道捕获坏值。但是,我确实看到了可能出现的其他问题,例如,关键字出现不止一次,或者如果使用了多个搜索词,所以我知道它并不像抓取数组那么容易进行数学运算。
编辑:看起来mod添加链接就可以了。现在考试吧。对于那些询问输出的人:数据:“这将来自数据库,并使用全文查询进行选择,使用的关键字是'选中'”
输出需要:“数据库,并使用全文获得SELECTED”。
答案 0 :(得分:0)
我认为最大的缺点是查询这些结果,无论以后执行任何字符串操作,无论哪种方式都会花费你的性能。
我会在这个上使用javascript,从PHP返回数据并让javascript找到你正在寻找的单词。它让浏览器弄明白,从而节省了服务器的负担。
但是如果你已经开始使用PHP,那么我会按照你的建议去做,将字符串转换为单词数组,并根据给定的偏移量返回单词。
在jQuery和javascript中它可能像:
jQuery.ajax({
dataType: "json",
url: "path/to/script.php",
complete: response( response ){
// assuming we`re getting a json result
// in the following format:
// {
// "sentence": "This is my sentence with a word that should highlight the first and last 20 words..",
// "word": "hightlight"
// }
var offset = 20;
var output = createHightlight(response.sentence, response.word, offset);
}
});
function createHighlight(sentence, word, offset ){
var string = "";
var words = sentence.split(" ");
var index = words.indexOf(word);
offset = offset !== undefined ? offset : 20;
var start = 0, end = words.length;
if( index - offset >= 0){
start = index - offset;
}
if( index + offset < words.length){
end = index + offset;
}
for( var i = start; i <= end; i++ ){
string += words[i] + " ";
}
return string;
}