2013-06-30 15 views
0

我有一個查詢,我試圖做的是當用戶搜索我的字謎解算器時,他們可能會輸入一個通配符作爲?在搜索字段中。php |通過woldcard尋找不在原始搜索中的字母

<input type="text" name="l"> 

假設用戶輸入「tes?」

我的查詢會發現每一個字可以以這些字母包括1個通配符以及

SELECT `word`, 0+IF(`a` > 0, `a` - 0, 0)+IF(`b` > 0, `b` - 0, 0)+IF(`c` > 0, `c` - 0, 0)+IF(`d` > 0, `d` - 0, 0)+IF(`e` > 1, `e` - 1, 0)+IF(`f` > 0, `f` - 0, 0)+IF(`g` > 0, `g` - 0, 0)+IF(`h` > 0, `h` - 0, 0)+IF(`i` > 0, `i` - 0, 0)+IF(`j` > 0, `j` - 0, 0)+IF(`k` > 0, `k` - 0, 0)+IF(`l` > 0, `l` - 0, 0)+IF(`m` > 0, `m` - 0, 0)+IF(`n` > 0, `n` - 0, 0)+IF(`o` > 0, `o` - 0, 0)+IF(`p` > 0, `p` - 0, 0)+IF(`q` > 0, `q` - 0, 0)+IF(`r` > 0, `r` - 0, 0)+IF(`s` > 1, `s` - 1, 0)+IF(`t` > 1, `t` - 1, 0)+IF(`u` > 0, `u` - 0, 0)+IF(`v` > 0, `v` - 0, 0)+IF(`w` > 0, `w` - 0, 0)+IF(`x` > 0, `x` - 0, 0)+IF(`y` > 0, `y` - 0, 0)+IF(`z` > 0, `z` - 0, 0) AS difference FROM `TWL06` WHERE LENGTH(`word`) <= 4 HAVING difference <= 1 ORDER BY LENGTH(`word`) DESC 

我的查詢工作正常做。我想要做的是基於它找到的單詞,我希望它將單詞中發現的字母顏色更改爲藍色,以通知用戶這是通配符。

因此,如果用戶輸入「tes?」結果將是「測試」在這一點上,我希望能夠確定使用該字母的次數,比較它在原始搜索中輸入的次數,然後將顏色更改爲藍色。因此,這將是這個樣子

TES<span style="color:#0000FF">T</span> 

我嘗試使用foreach循環使用的preg_match,以確定這一點,但我似乎無法得到它的正確排列。任何幫助,將不勝感激。以下是我的代碼示例,其中原始搜索詞與$ l關聯爲「TES?」。用你的戰略

SELECT `word`, 0+IF(`a` > 0, `a` - 0, 0)+IF(`b` > 0, `b` - 0, 0)+IF(`c` > 0, `c` - 0, 0)+IF(`d` > 0, `d` - 0, 0)+IF(`e` > 1, `e` - 1, 0)+IF(`f` > 0, `f` - 0, 0)+IF(`g` > 0, `g` - 0, 0)+IF(`h` > 0, `h` - 0, 0)+IF(`i` > 0, `i` - 0, 0)+IF(`j` > 0, `j` - 0, 0)+IF(`k` > 0, `k` - 0, 0)+IF(`l` > 0, `l` - 0, 0)+IF(`m` > 0, `m` - 0, 0)+IF(`n` > 0, `n` - 0, 0)+IF(`o` > 0, `o` - 0, 0)+IF(`p` > 0, `p` - 0, 0)+IF(`q` > 0, `q` - 0, 0)+IF(`r` > 0, `r` - 0, 0)+IF(`s` > 1, `s` - 1, 0)+IF(`t` > 1, `t` - 1, 0)+IF(`u` > 0, `u` - 0, 0)+IF(`v` > 0, `v` - 0, 0)+IF(`w` > 0, `w` - 0, 0)+IF(`x` > 0, `x` - 0, 0)+IF(`y` > 0, `y` - 0, 0)+IF(`z` > 0, `z` - 0, 0) AS difference FROM `TWL06` WHERE LENGTH(`word`) <= 4 HAVING difference <= 1 ORDER BY LENGTH(`word`) DESC 
$result = mysql_query($query); 
while($row = mysql_fetch_array($result)) { 
    $getvalues = str_split($row['word']); 
    foreach($getvalues as $letter) { 
     if (!preg_match('/'.$letter.'/',$l)) { 
      $buildword = '<span style="color:#0000FF">'.$letter.'</span>'; 
     } else { 
      $buildword = $letter; 
     } 
    } 
} 

回答

1

的一個問題是,「測試」一詞有兩個ts,所以我決定將輸入值分配給$temp(以防萬一,你需要使用$l別的地方),而每一次的信被發現減去它。如果用戶輸入「tes」,它將逐個刪除這些字母,直到沒有任何東西留下,「test」中的最後一個t顯示爲藍色。

while($row = mysql_fetch_array($result)) { 
    $getvalues = str_split($row['word']); 
    $temp = $l; 
    $buildword = ''; 
    foreach($getvalues as $letter) { 
     $pos = strpos($temp, $letter); 
     if ($pos === FALSE) { 
      $buildword .= '<span style="color:#0000FF">'.$letter.'</span>'; 
     } else { 
      if ($pos == 0){ 
       $temp = substr($temp, 1); 
      } else { 
       $first = substr($temp, 0, $pos); 
       $temp = $first.substr($temp, $pos+1); 
      } 
      $buildword .= $letter; 
     } 
    } 
} 
+0

它強調所有的字母爲藍色 –

+0

我不知道這個問題可能是什麼,因爲我測試了它,它只是強調了在一個時間一個字母。 –

+0

好吧,那是因爲我用大寫字母回覆了結果,使它們變得更低,而且效果很好。非常感謝 –