сортировать массив массивов $ по повторениям и удалять повторы - PullRequest
0 голосов
/ 16 января 2011

мне нужно сделать это в php допустим, у меня есть [1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,9,9,9,9,9] я бы хотел [1,5,9,2,3,4]

но моя ситуация немного другая, это результат запроса MySQL

У меня есть только атрибут asociative 'id_deseada', так что теперь у меня есть

while($row = mysql_fetch_array($result){
         $t = $row['id_deseada'];
 }

так что вместо этого, я думаю, я должен был бы сделать купальники, как в первом примере; сортировать результат $, упорядоченный по времени повторения, и, возможно, лучше в новом массиве с новым полем 'count'?

Это все начинается из-за этого запроса:

ВЫБРАТЬ article.id в качестве id_deseada, теги. * ИЗ статей, тегов WHERE tags.id_article = article.id AND tags.name IN ('name one', 'name two', 'form search input', '.. .)

проблема в том, что возвращает один результат для каждого тега, и я хочу получить результат для каждой статьи.

Ответы [ 2 ]

2 голосов
/ 16 января 2011

Сначала создайте массив значений следующим образом:

$vals = array();
while($row = mysql_fetch_array($result){
         $vals[] = $row['id_deseada'];
}

Затем count и sort :

$valCounts = array_count_values($vals);
arsort($valCounts);
$result = array_keys($valCounts);
0 голосов
/ 16 января 2011

Вы можете сделать это с помощью SQL-запроса.Например, у нас есть эта таблица:

create table lol (id_deseada int);
insert into lol values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(2),(3),(4),(5),(5),(5),(5),(5),(5),(5),(5),(5),(5),(5),(9),(9),(9),(9),(9);

Вы можете выбрать id_deseada из сортировки базы данных по повторениям, используя группирование и упорядочение.

SELECT id_deseada FROM lol
GROUP BY id_deseada
ORDER BY COUNT(*) DESC

Результат: 1, 5, 9, 2, 3, 4.

...