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

nkldn

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

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

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


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

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

как это грамотнее всего сделать? неужели двумя циклами последовательно перебирать все значения?
 

SiMM

Новичок
> как это грамотнее всего сделать?
Средствами СУБД.
 

nkldn

Новичок
SiMM
мне нужно не просто его отсортировать по уникальности, нужна проверка на совпадение по словам

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

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

Gremboloid

инженера Гр...
решение в лоб:
преобразовать все элементы массива в один регистр (strtolower, strtoupper), потом применить array_unique
 

nkldn

Новичок
Gremboloid
см. выше уже написал нюансы

спасибо ) я так сейчас и делаю
 

Beavis

Banned
Автор оригинала: nkldn
SiMM
мне нужно не просто его отсортировать по уникальности, нужна проверка на совпадение по словам

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

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

nkldn

Новичок
Код:
id       title
111    исполнитель - композиция 1
343    исполнитель 2 - композиция 1
256    исполнитель абв
77     ИСПОЛНИТЕЛЬ - Композиция 1
999    КОМПОЗИЦИЯ 1 - ИСПОЛНИТЕЛЬ


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

pilot911

Новичок
нельзя ли упростить задачу? может проще сделать это до формирования массива

для этого нужно всем нам сказать, как получается такой массив
 

nkldn

Новичок
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


может логически что-то неправильно потому и спрашиваю
 

Adelf

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

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

P.S. Я бы для данной задачи как-нибудь сфинкс попытался бы прикрутить. Он там умеет вычислять самые частые слова и т.д.
 

nkldn

Новичок
Adelf
получается такой алгоритм как я и думал..

спасибо
 

john.brown

просто кулибин
nkldn
Напрашивается еще одна таблица - исполнитель...
Ну и связующая таблица, конечно.
 
Сверху