2010-07-13 8 views
0

У меня есть сайт, где моя база данных устанавливается с различными художниками и названия песен в пределах одной и той же строке, где он мог бы выглядеть следующим образом:Как удалить только полностью повторяющиеся значения из массива?

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».

Первая проблема заключается в том, что если пользователь был начать печатать "" в форме поиска, значения будут придумать, как это:

В Monkees
The Monkees
The Hollies
В Hollies
The Beatles
The Beatles

Таким образом, я использовал array_unique функцию, чтобы удалить повторяющиеся значения, но мне кажется, что накануне п, если значение имеет один дубликат слова (этот случай будучи «»), он удаляется целиком, поэтому только первое значение возвращается:

The Monkees

Где выход, я хотел бы иметь будет:

The Monkees
The Hollies
The Beatles

Итак, что может быть еще один способ, которым я могу удалить их дублировать Вэл и отображать их так, как мне хотелось бы?

EDIT:

Вот мой исходный код:

<?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)); 
?> 
+1

Как просто отфильтровать их в SQL-запросе с помощью 'GROUP'? – deceze

+0

Ваша интуиция неверна, ошибка не в array_unique. Покажите нам какой-то код. –

+0

Добавил мой источник. На самом деле я знаю, что это не ошибка, я думаю, что это просто способ работы array_unique? Я не понимаю этого полностью. Поэтому я ищу какое-то объяснение и, возможно, решение. – user389956

ответ

2

array_unique использует строгое сравнение. Поэтому учитываются различия в случае и пробеле. Поскольку все эти значения кажутся строками, вероятно, причина, по которой array_unique работает не так, как вы ожидали.

Ваша структура базы данных затрудняет отсечение дубликатов. Я бы предложил реорганизовать его в таблицу художников и таблицу песен, где песни просто ссылаются на идентификатор художника. Это даст вам больше шансов сохранить уникальный список артистов.

Кроме того, одна вещь, которую я хотел бы сделать для вашего автозаполнения, - установить ее, чтобы игнорировать определенные строки. («a», «an», «the»). Они известны как «стоп-слова», а результаты поиска более важны, не выполняя поиск по общепринятым словам.

+0

Лучшая идея - это действительно повторная факторизация вашей базы данных. Ваш одноколоночный blob сделает любое другое решение довольно болезненным. – meagar

Смежные вопросы