como destacar os resultados da pesquisa
ola eu tenho uma função de pesquisa em que eu vou procurar um banco de dados por palavras-chave. Gostaria de destacar as palavras-chave e encontrei uma segunda função que gostaria de implementar na minha função de pesquisa.
então eu tenho esse código para a pesquisa:
<code><?php function searchText($keywords){ global $db; $returned_results = array(); $where2 = ""; $keywords = preg_split('/[\s]+/', $keywords); $total_keywords = count($keywords); foreach ($keywords as $key=>$keyword){ $where2 .= "`column` LIKE '%$keyword%'"; if ($key != ($total_keywords - 1)){ $where2 .= " OR "; } } $results_text = "SELECT `a`, `b`, LEFT(`c`, 150) as `c` FROM `table` WHERE $where2"; $results_num_text = ($query2 = mysqli_query($db, $results_text)) ? mysqli_num_rows($query2) : 0; if ($results_num_text === 0){ return false; } else { while ($row = mysqli_fetch_assoc($query2)){ $returned_results[] = array( 'ab' => $row['ab'], 'cd' => $row['cd'], ); } return $returned_results; } } ?> </code>
e gostaria de implementar uma segunda função:
<code><?php function mark_words ($text, $words, $colors = false) { if (!$colors || !is_array($colors) ) { $colors = array('#ff9999', '#ffff99', '#ff99ff', '#99ffff','#99ff99'); } $c = 0; foreach ($words as $w) { $w = preg_quote(trim($w)); if($w=='') { continue; } $regexp = "/($w)(?![^<]+>)/i"; $replacement = '<b style="background-color:'.$colors[$c].'">\\1</b>'; $text = preg_replace ($regexp,$replacement ,$text); $c++; if ($c >= count($colors)) { $c=0; } } return $text; } $example = <<< EOT some text is here inside EOT; $search = array('some','is', 'inside'); echo mark_words($example, $search); ?> </code>
então eu tenho esse código que não funciona:
<code><?php function searchText($keywords, $colors = false){ global $db; if (!$colors || !is_array($colors) ) { $colors = array('#ff9999', '#ffff99', '#ff99ff', '#99ffff','#99ff99'); } $c = 0; $returned_results = array(); $where2 = ""; $keywords = preg_split('/[\s]+/', $keywords); $total_keywords = count($keywords); foreach ($keywords as $key=>$keyword){ $regexp = "/($w)(?![^<]+>)/i"; $replacement = '<b style="background-color:'.$colors[$c].'">\\1</b>'; $text = preg_replace($regexp,$replacement ,$keywords); $c++; if ($c >= count($colors)) { $c=0; } $where2 .= "`b` LIKE '%$keyword%'"; if ($key != ($total_keywords - 1)){ $where2 .= " OR "; } } $results_text = "SELECT `a`, LEFT(`b`, 150) as `b`, `c` FROM `table` WHERE $where2"; $results_num_text = ($query2 = mysqli_query($db, $results_text)) ? mysqli_num_rows($query2) : 0; if ($results_num_text === 0){ return false; } else { while ($row = mysqli_fetch_assoc($query2)){ $returned_results[] = array( 'ab' => $row['a'], 'cd' => $row['b'], ); } return $returned_results; $highlight = array($keywords); echo mark_words($highlight); } } ?> </code>
como eu procurei como fazer isso, encontrei duas possibilidades. o primeiro seria uma função que o segundo seria diretamente para destacá-lo da consulta de seleção:
<code>SELECT REPLACE(`col`, 'foobar', '<span class="highlight">foobar</span>') AS `formated_foobar` FROM … WHERE `col` LIKE "%foobar%" </code>
então minha pergunta é como posso implementar a segunda função na função de pesquisa ou seria melhor usar o segundo método?
Se houver alguém que possa me ajudar, eu realmente apreciaria. Muito obrigado.