сортировка массива по уникальности

  • Автор темы Автор темы nkldn
  • Дата начала Дата начала

nkldn

Новичок
сортировка массива по уникальности

есть например такой массив

Array
(
[111] => исполнитель - композиция 1
[343] => исполнитель 2 - композиция 1
[256] => исполнитель абв
[77] => ИСПОЛНИТЕЛЬ - Композиция 1
)


записей в массиве может быть например 200-300

нужно отфильтровать массив чтоб значения были уникальны и регистронезависимы. то есть предполагается что 111 и 77 равны.
ключ 77 следовательно надо запомнить

как это грамотнее всего сделать? неужели двумя циклами последовательно перебирать все значения?
 
> как это грамотнее всего сделать?
Средствами СУБД.
 
SiMM
мне нужно не просто его отсортировать по уникальности, нужна проверка на совпадение по словам

то есть например если будет далее такая строчка в массиве -

[999] КОМПОЗИЦИЯ 1 - ИСПОЛНИТЕЛЬ (то есть разный регистр и позиция слов по сравнению с [111] и [77] )
ТО [999] тоже считается НЕ уникальной и записывается в blacklist
 
решение в лоб:
преобразовать все элементы массива в один регистр (strtolower, strtoupper), потом применить array_unique
 
Gremboloid
см. выше уже написал нюансы

спасибо ) я так сейчас и делаю
 
Автор оригинала: nkldn
SiMM
мне нужно не просто его отсортировать по уникальности, нужна проверка на совпадение по словам

то есть например если будет далее такая строчка в массиве -

[999] КОМПОЗИЦИЯ 1 - ИСПОЛНИТЕЛЬ (то есть разный регистр и позиция слов по сравнению с [111] и [77] )
ТО [999] тоже считается НЕ уникальной и записывается в blacklist
MySQL позволяет это сделать элементарно
 
Код:
id       title
111    исполнитель - композиция 1
343    исполнитель 2 - композиция 1
256    исполнитель абв
77     ИСПОЛНИТЕЛЬ - Композиция 1
999    КОМПОЗИЦИЯ 1 - ИСПОЛНИТЕЛЬ



например.. как сделать такой запрос чтобы он нашёл и не включил в выдачу строки с id 77 и 999
 
нельзя ли упростить задачу? может проще сделать это до формирования массива

для этого нужно всем нам сказать, как получается такой массив
 
pilot911
есть таблица c полями
Код:
id    title    lyrics    hits    url

таким запросом я вывожу например топ30 композиций
Код:
	SELECT *
	FROM `content`
	WHERE url != ''
	AND lyrics != ''
	ORDER BY `hits` DESC
	LIMIT 0 , 30

но нужно как я описывал выше сделать так чтоб title не были одинаковыми, условия я писал выше

это необходимо для облака тегов. то есть чтоб не было в облаке
БИ2 - Зажигать и ЗАЖИГАТЬ БИ2


может логически что-то неправильно потому и спрашиваю
 
Пройдись по массиву.
В цикле:
1) Выброси все небуквенноцифровые символы. Делается одной регуляркой.
2) strtolower.
3) Разбей фразу на слова. Отсортируй слова в каком-либо порядке. делается парой функций.
После этого цикла
БИ2 - Зажигать => би2 зажигать
ЗАЖИГАТЬ БИ2 => би2 зажигать

После цикла делаем array_unique.

P.S. Я бы для данной задачи как-нибудь сфинкс попытался бы прикрутить. Он там умеет вычислять самые частые слова и т.д.
 
nkldn
Напрашивается еще одна таблица - исполнитель...
Ну и связующая таблица, конечно.
 
Сверху