我有以下自动完成框的代码,我添加了一个图像以澄清选择,但想确保返回的 title
是唯一的,但是,当我到达使数组唯一,我添加了其他代码,使其在其他区域不唯一。有办法解决这个问题吗?
$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();
最佳答案
我可能对你的问题感到困惑。看起来您已经有了唯一的标题,因为您在 sql 中按标题进行分组。但是,也许您有额外的非字母数字字符,您正在使用正则表达式删除这些字符,从而使一些独特的标题相同。
在这种情况下,不要像现在这样构建 $output_items,而是尝试:
$output_items[$row['title']] = $row['imageURL'];
这将确保每个标题都是唯一的。您将获得与该标题匹配的最后一行的 imageURL。如果您想要第一个匹配的标题,则只需在覆盖它之前检查 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;
关于php - array_unique 仅在一个字段上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784861/