我有一个网站,我的数据库在同一行中设置了不同的艺术家和歌曲标题,可能看起来像这样:
artist: The Monkees, title: I'm A Believer
artist: The Monkees, title: Daydream Believer
artist: The Hollies, title: The Air That I Breathe
artist: The Hollies, title: Bus Stop
artist: The Beatles, title: Hello, Goodbye
artist: The Beatles, title: Yellow Submarine
我有一个自动完成小部件,我的网站的搜索表单设置了一个json_encoded数组,填充了'artist'值。
第一个问题是,如果用户开始在搜索表单中键入“the”,则会出现如下值:
Monkees
Monkees
Hollies
Hollies
甲壳虫乐队
甲壳虫乐队
所以我使用array_unique函数删除重复的值,但似乎即使一个值有一个重复的单词(这种情况是“the”),它也会被完全删除,所以只返回第一个值:
The Monkees
我想要的输出是:
Monkees
Hollies
甲壳虫乐队
那么,我可以采用另一种方式删除这些重复值并按照我想要的方式显示它们?
编辑:
这是我的源代码:
<?php
include 'includes/config.php';
$return_arr = array();
$term = ($_GET['term']);
if ($con)
{
$artist = mysql_query("SELECT * FROM songs WHERE artist LIKE '%$term%' LIMIT 0, 5");
while ($row = mysql_fetch_array($artist, MYSQL_ASSOC)) {
$row_array['value'] = strtolower($row['artist']);
array_push($return_arr,$row_array);
}
}
mysql_close($con);
echo json_encode(array_unique($return_arr));
?>
答案 0 :(得分:2)
array_unique
使用严格的比较。因此考虑了案例和空白的差异。由于所有这些值似乎都是字符串,这可能是array_unique
无法正常工作的原因。
您的数据库结构使得删除重复项非常困难。我建议将其重构为一个艺术家表和一个歌曲表,其中歌曲只是参考艺术家的身份。这将使您更有可能保持您的艺术家列表的独特性。
另外,我要为自动完成功能做的一件事就是将其设置为忽略某些字符串。 ('a','an','the')这些被称为停用词,并且通过不对常用词进行搜索来帮助搜索结果更具相关性。