基于关键字PHP的数据预览

时间:2016-11-30 19:08:41

标签: php

我正在尝试从数据库进行预览,并希望在关键字之前和之后使用20个单词进行预览。我可以想到几种方法来做到这一点,但似乎它会很难用于服务器。

一种方法是使用str_word_count()将数据分解为单词数组,然后搜索数组,查找单词索引,并进行数学计算,但看起来它似乎太难以击中服务器

有更好的方法吗?

“20”只是一个例子,并且会捕获小于20的长度,所以我知道捕获坏值。但是,我确实看到了可能出现的其他问题,例如,关键字出现不止一次,或者如果使用了多个搜索词,所以我知道它并不像抓取数组那么容易进行数学运算。

编辑:看起来mod添加链接就可以了。现在考试吧。对于那些询问输出的人:

数据:“这将来自数据库,并使用全文查询进行选择,使用的关键字是'选中'”

输出需要:“数据库,并使用全文获得SELECTED”。

1 个答案:

答案 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;
}