Как выделять ключевые слова в поиске php mysql? - PullRequest
1 голос
/ 12 октября 2010

Я хочу, чтобы мои выходные данные были такими, когда я ищу ключевое слово, например

"программирование"

php программирование язык

Как это сделать в php mysql?

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 12 октября 2010

Просто выполните str_replace для возвращенного текста.

$search = 'programming';
// $dbContent = the response from the database

$dbContent = str_replace( $search , '<b>'.$search.'</b>' , $dbContent );

echo $dbContent;

Любой экземпляр «программирования», даже если он является частью более крупного слова, будет заключен в теги <b>.

Для случаев, когда используется более одного слова

$search = 'programming something another';
// $dbContent = the response from the database

$search = explode( ' ' , $search );
function wrapTag($inVal){
  return '<b>'.$inVal.'</b>';
}
$replace = array_map( 'wrapTag' , $search );

$dbContent = str_replace( $search , $replace , $dbContent );

echo $dbContent;

Это разделит $search на массив в пробелах, а затем обернет каждое совпадение в теги <b>.

Вы можете использовать теги <b> или <strong> (см. В чем разница между и , и ? для их обсуждения).

2 голосов
/ 12 октября 2010
$search = @$_GET['q'];
$trimmed = trim($search);

function highlight($req_field, $trimmed)  //$req_field is the field of your table
{
        preg_match_all('~\w+~', $trimmed, $m);
        if(!$m)
            return $req_field;
        $re = '~\\b(' . implode('|', $m[0]) . ')\\b~';
        return preg_replace($re, '<b>$0</b>', $req_field);
}

  print highlight($req_field, $trimmed);

Таким образом, вы можете bolden искать ключевые слова. Это довольно легко и хорошо работает.

0 голосов
/ 10 сентября 2014

Ответ на самом деле немного сложнее, чем это. В случае использования общих результатов поиска необходимо учитывать и другие факторы:

  • Вы должны учитывать прописные и строчные буквы (Программирование, ПРОГРАММИРОВАНИЕ, программирование и т. Д.);
  • если строка содержимого очень длинная, вы не захотите возвращать весь текст, а только искомый запрос и несколько слов до и после него для контекста;

Этот парень понял это:

//$h = text
//$n = keywords to find separated by space
//$w = words near keywords to keep

function truncatePreserveWords ($h,$n,$w=5,$tag='b') {
    $n = explode(" ",trim(strip_tags($n))); //needles words
    $b = explode(" ",trim(strip_tags($h))); //haystack words
    $c = array();                       //array of words to keep/remove
    for ($j=0;$j<count($b);$j++) $c[$j]=false;
    for ($i=0;$i<count($b);$i++) 
        for ($k=0;$k<count($n);$k++) 
            if (stristr($b[$i],$n[$k])) {
                $b[$i]=preg_replace("/".$n[$k]."/i","<$tag>\\0</$tag>",$b[$i]);
                for ( $j= max( $i-$w , 0 ) ;$j<min( $i+$w, count($b)); $j++) $c[$j]=true; 
            }   
    $o = "";    // reassembly words to keep
    for ($j=0;$j<count($b);$j++) if ($c[$j]) $o.=" ".$b[$j]; else $o.=".";
    return preg_replace("/\.{3,}/i","...",$o);
}

Работает как шарм!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...