Как выделить результаты SQL, которые похожи на ключевое слово

Я видел много постов в Google и на этом сайте на одну и ту же тему, но я не понял ни одного из них. (Я не очень опытный в PHP еще)

У меня есть код ниже для вывода информации о президентах, которые сохраняются в базе данных. Результат в таблице. Но я хочу выделить ключевые слова в этой таблице. Так, например, если вы ищете «объявление», вы выделите «объявление» в «Адамс».

-Name-       -Birth-      -years president-    -died-
Adams J Q     1767              4                80

Как я уже говорил ранее, я не очень опытный, поэтому я надеюсь, что кто-то может показать мне, что делать.
Спасибо!

Код:

 extract($_POST, EXTR_SKIP);
pdo()->prepare($qry);                                                                                               // wat is de query
pdo()->bindParam(':zoekTerm', "%$zoekTerm%", PDO::PARAM_STR);                                                       // vul parameter in; let op het '' en "" verschil
pdo()->execute();                                                                                                   // uitvoeren van de query met paramsfunction getData($qry, Array $bindParameters)                                                                       // haal data uit de query
{
pdo()->prepare($qry);
foreach($bindParameters as $k => &$v) {
pdo()->bindParam($k, $v, PDO::PARAM_STR);
}
pdo()->execute();
return pdo()->fetchAll();                                                                                       // dus een array (associatief)
}
//print the data from an array

function prData(Array $data) {

foreach($data as $k => $v) {
//print_r($v);
echo implode( ', ', $v);
}

}

function prDataOp1Regel(Array $data) {
foreach($data as $r) {

$d = array();
foreach($r as $v) {
$d[] = $v;
}
print implode('</td><td>', $d); tr();
}
}
function prDataKeys(Array $data) {
foreach($data as  $v) {
$r = array();
foreach($v as $k => $dummy) {
$lk = strtolower($k);
// even iets geks. Omdat het kan.
if($lk === "gebjaar") $lk = "Geboorte jaar" ;
$r[] =  Ucfirst($lk);
}

echo    implode ('</th><th>', $r); //nl();
break;

}
}$qry = "SELECT
presnaam AS 'Naam President'
,Gebjaar
,Jaarpres AS 'Aantal jaren president'
,Sterfleeftijd
,Partij
,Staatgeboren AS 'Geboren in'
FROM president
WHERE presnaam
LIKE :zoekTerm
";

$d = getData($qry, array(':zoekTerm' => "%$zoekTerm%"));

echo '<table id="outputtable"><tr>';
echo '<th>';
prDataKeys($d);
echo '</th>';
echo '<tr>';
echo '<td>';
prDataOp1Regel($d);
echo '</td>';
echo '</td>';
echo '</tr></table>';

0

Решение

Вы можете использовать preg_replace или str_replace, чтобы заменить искомую строку некоторым html, который вы можете отформатировать с помощью css.

Например, «Адамс» будет заменен чем-то вроде «<span class = ‘match’>Объявление</ SPAN>АМС «или»<сильный>Объявление</ сильный>ams «, если поиск был» Ad «.

РЕДАКТИРОВАТЬ:

В вашей функции prDataOp1Regel вы можете выполнить замену строки в строке:

$d[] = $v;

Эта строка станет:

$d[] = str_replace ( $searchStr , "<span class='match'>{$searchStr}</span>" , $v);

Однако вам нужно обновить определение функции, чтобы оно содержало строку поиска в качестве параметра:

function prDataOp1Regel(Array $data, $searchStr) {

Кроме того, вам не следует выполнять поиск и замену для каждой строки и столбца, это следует делать только для столбца, по которому выполняется поиск. Если массив $ data является ассоциативным массивом, где имена столбцов являются ключом для каждого значения в столбце, вы можете изменить код так, чтобы он был похож на:

foreach($r as $columnName => $v) {
if ($columnName == 'Naam President') {
$d[] = str_replace ( $searchStr , "<span class='match'>{$searchStr}</span>" , $v);
} else {
$d[] = $v;
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]