Фильтрация массива.

zartsergey

Постоялец
Регистрация
1 Окт 2013
Сообщения
68
Реакции
6
Доброго времени суток!
Есть массив, который состоит из чисел.
Данные в нем повторяются.
Как оставить данные которые встречается не менее чем, допустим, 6 раз. А те которые менее чем 6 раз - удалить.
Т.е. например

Код:
3
4
2
4
1
4
6
4
9
4
8
4
В данном случае из массива должны быть удалены все числа, кроме 4. Позиций очень много.
Уже голову сломал над этим =(
Спасибо!

Очепятался, недосып.
Как оставить данные которые встречается не менее чем 6 раз. А остальные удалить.
 
Последнее редактирование модератором:
Влом писать код, но наводку на решение дам. Решение высечено топором из камня, и затратно по ресурсам, но я бы делал так (ибо нубокодер).
Итак случай, когда нужно УБИТЬ ВСЕ ДАННЫЕ, КОТОРЫЕ ВСТРЕЧАЮТСЯ МЕНЬШЕ 4 РАЗ:
1) Сортируешь массив по возрастанию
2) Присваиваешь переменной $i = count($tvoiMassiv); Получаешь в переменную количество значений твоего массива
3) обьявляешь остановочную переменную $stopper = 0;
4) делаешь цикл
Код:
while ($stopper <= $i-4) {
   if(!($tvoiMassiv[$stopper] == $tvoiMassiv[$stopper+1]  && $tvoiMassiv[$stopper+1] == $tvoiMassiv[$stopper+2] && $tvoiMassiv[$stopper+2] == $tvoiMassiv[$stopper+3])) {
      unset($tvoiMassiv[$stopper]);
      }
   if ($tvoiMassiv[$stopper] == $tvoiMassiv[$stopper+1]  && $tvoiMassiv[$stopper+1] == $tvoiMassiv[$stopper+2] && $tvoiMassiv[$stopper+2] == $tvoiMassiv[$stopper+3]) {
      $stopper = $stopper+3;
      }
   $stopper++;
   }
Получается ты сортируешь массив, сравниваешь 4 элемента подряд, если они не одинаковые, удаляешь первый, сравниваешь следующие 4, удаляешь один. Если 4 оказываются одинаковые - перепрыгиваешь эти 4 элемента (3 при проверки ифом, 1 перед выходом из цикла).

PS: недочитал задание, там "не менее", над этим нужно подумать...

Дружище, забудь, то что было в этом посте.
Неоттестил говнокод, работать не будет, сорри за плохой совет :)
 
Последнее редактирование модератором:
PHP:
//Данные
$input=array(1,2,2,3,3,3,3,3,3,3,4,4,4,4,2,34,23,1,4,5,4445,5,555,5,7,8,5,9,0,5,4,0);
$max=5;
$return=array();

//Код
$array=array_count_values($input);
foreach ($array as $key=>$value) {
if ($value > $max) $return[]=$key;
}
var_dump($return);

Результат:
Код:
array(2) {
  [0]=>
  int(3)
  [1]=>
  int(4)
}
 
Назад
Сверху