2012-01-09 61 views
0

我有一個自動完成框的代碼,我添加了一個圖像以供選擇澄清,但要確保返回的title是唯一的,但是當我得到使數組唯一的代碼時,我添加了其他代碼,這使得它在其他領域不是唯一的。有沒有解決的辦法?array_unique只在一個字段上?

$query = "SELECT $title, imageURL FROM PRprodINFO2 WHERE ((prodcatID = '$cat_id') 
      AND ($title LIKE \"%" . $_GET["q"] . "%\")) group by $title LIMIT 8"; 
} 

$result = mysql_query($query); 

// set the array 
$output_items = array(); 

while($row = mysql_fetch_array($result)) { 

    // clean after first non letter/number 
    $row[$title] = preg_replace('/[^\w\s].*$/', "", $row[$title]); 

    //trim spaces 
    $row[$title] = trim($row[$title]); 

    // add image src 
    $output_items[] = '<img src='.$row[imageURL].' style=max-width:50px;>' 
         .$row[$title]; 

} // while 

// here i need just $row[title] to be unique, 
// it is made non unique after regex strips off some characters 
$output = array_unique($output_items); 

print(implode("\n", $output)); 

mysql_close(); 
+0

在第一行中,您的代碼易受到盲sql注入的攻擊。你必須從外面解析一切。 – rekire 2012-01-09 07:03:00

+0

你的意思是你想讓數據庫中的標題唯一嗎? – 2012-01-09 07:18:41

+0

@colighto我已經稍微修改了這個問題,它與數據庫數據無關 – 2012-01-09 07:27:38

回答

1

我可能會被你所問的問題所困惑。看起來你已經擁有獨特的標題了,因爲你在sql中按標題分組。但是,也許你有額外的非字母數字字符,你正在剝離你的正則表達式,使一些獨特的標題相同。

在這種情況下,而不是像你建立你的$ output_items,嘗試:

$output_items[$row['title']] = $row['imageURL']; 

這將確保每個標題都是獨一無二的。您將擁有與該標題匹配的最後一行的圖像URL。如果你想,而是匹配的第一個冠軍,那麼就重寫它像之前檢查isset

if (!isset($output_items[$row['title']])) $output_items[$row['title']] = $row['imageURL']; 

然後,循環外,建立你的輸出字符串。

$output = ''; 
foreach ($output_items as $title => $image) { 
    $output .= '<img src='.$image.' ...>'.$title."\n"; 
} 
echo $output; 
+0

謝謝,但我不確定你要替換/修改這個解決方案的代碼,你能否更具體一點 – 2012-01-09 07:26:45