2014-10-12 110 views
0

我已經看到在谷歌和本網站上的許多職位關於相同的主題,但我不明白他們中的任何人。 (我不熟悉php)如何突出顯示的結果,就像關鍵字

我有下面的代碼輸出保存在數據庫中的總統信息。結果在一張表格中。但我想突出顯示此表中的關鍵字。例如,如果您搜索「廣告」,則會突出顯示「adams」中的「廣告」。

-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 params 


    function 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

我沒看完代碼細節,但有一件事我注意到,與問題無關,是否使用了:if(preg_match(X,Y)){...} if(!preg_match(X,Y)){...}。相反,你應該使用:if(preg_match(X,Y)){...} else {...}。它使用更少的資源,更新後不太可能出現錯誤。 – 2014-10-12 08:01:01

+0

而不是發佈完整的代碼,並期望人們通過它,你能把它縮減到與你的問題相關的部分嗎?這會讓人們更容易幫助你,並且你會得到更快的回覆 – 2014-10-12 08:02:37

+0

謝謝你們,我會改變它。 – Paul 2014-10-12 08:13:08

回答

0

可以使用的preg_replace或str_replace函數來替換正在搜查了一些HTML,你可以使用CSS格式的字符串。

例如,「亞當斯」將與類似「<跨度類=‘匹配’>廣告</SPAN > AMS」或「<強>廣告< /強> AMS」如果搜索的是「取代廣告」。

編輯:

在你的函數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

謝謝你的迴應!你的回答是我在谷歌上找到的,但我不知道究竟在哪裏/在哪裏改變它。我沒有寫這個代碼,所以有些部分對我來說還不清楚。 – Paul 2014-10-12 08:22:41

+0

我已更新我的答案,以獲得更多詳細信息 – 2014-10-12 18:51:28

+0

非常感謝!你真棒 – Paul 2014-10-13 09:01:41