Реклама на сайте Advertise with us

Нужна функция обработки простого одномерного массива

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

прожектор перестройки

С нами с 13.10.05
Сообщения: 1406
Рейтинг: 636

Ссылка на сообщениеДобавлено: 02/06/09 в 17:17       Ответить с цитатойцитата 

Имеется массив с уникальными и неуникальными значениями. Нужно на выходе сформировать два массива $unique и $nonunique. В первом содержатся значения, которые встречаются только один раз, во втором - два и более. Кто возьмется?

Host unlimited domains + 2 TB Bandwith | $200 за рефа

0
 

I L♥VE G♀RLZ

С нами с 28.11.07
Сообщения: 694
Рейтинг: 378

Ссылка на сообщениеДобавлено: 02/06/09 в 17:27       Ответить с цитатойцитата 

array_count_values не подходит? разделить результирующий массив на два - это дело техники уже

http://ru.php.net/manual/en/function.array-count-values.php

True Beauty Cash - HQ softcore sites

3
 



С нами с 27.03.09
Сообщения: 155
Рейтинг: 320

Ссылка на сообщениеДобавлено: 02/06/09 в 17:51       Ответить с цитатойцитата 

Код:

<?
//   $MainArray = array_map('rtrim', file("array.txt"));
$MainArray = array(4,5,1,2,5,4,3,0);
   $unique = array();
   $nonunique = array();
   $tmpArray = array_count_values($MainArray);

   foreach ($tmpArray as $key => $value)
      if ($value == 1)
         $unique[] = $key;
      else
         $nonunique[] = $key;

   echo "uniq:<br>";
   foreach ($unique as $item)
      echo $item."<br>";
   echo "non uniq:<br>";
   foreach ($nonunique as $item)
      echo $item."<br>";

?>

за отзыв возьмусь. отзывы оставлять в подписи icon_wink.gif

программист. набираю отзывы и заказы. | блог Вордпресскина

3
 

прожектор перестройки

С нами с 13.10.05
Сообщения: 1406
Рейтинг: 636

Ссылка на сообщениеДобавлено: 02/06/09 в 19:31       Ответить с цитатойцитата 

Спасибо! array_count_values конечно лучший вариант.

Host unlimited domains + 2 TB Bandwith | $200 за рефа

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 02/06/09 в 21:04       Ответить с цитатойцитата 

Код:
array_unique();

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

0
 



С нами с 27.03.09
Сообщения: 155
Рейтинг: 320

Ссылка на сообщениеДобавлено: 02/06/09 в 21:07       Ответить с цитатойцитата 

_s_[sov] писал:
Код:
array_unique();

создает массив с неповторяющимися элементами. то есть было 1233, станет 123.
не подходит, а так было бы неплохо конечно сделать array_unique а потом array_diff - вообще пара строк кода )

программист. набираю отзывы и заказы. | блог Вордпресскина

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 02/06/09 в 21:08       Ответить с цитатойцитата 

Scheme:
Цитата:
которые встречаются только один раз

все верно делает эта функция... сам же ниже ее предложил smail101.gif

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

0
 

« ... full on ... »

С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686

Ссылка на сообщениеДобавлено: 02/06/09 в 23:18       Ответить с цитатойцитата 

Scheme:
Вполне подходит, причём именно так, как ты описал, только вместо array_diff надо использовать array_diff_assoc:

Код:
$data_array = array(4,5,1,2,5,4,3,0,4,5,0,0);
$unique = array_unique($data_array);
$duplicate = array_diff_assoc($data_array, $unique);

Power of the lime madness...

0
 



С нами с 27.03.09
Сообщения: 155
Рейтинг: 320

Ссылка на сообщениеДобавлено: 03/06/09 в 07:33       Ответить с цитатойцитата 

2Corex
тз: "В первом содержатся значения, которые встречаются только один раз, во втором - два и более."
то есть был массив 12333, на выходе будут массивы 12 и 3.
твой вариант в первый массив затолкает 123, во второй - 33.

программист. набираю отзывы и заказы. | блог Вордпресскина

0
 

« ... full on ... »

С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686

Ссылка на сообщениеДобавлено: 03/06/09 в 09:36       Ответить с цитатойцитата 

Scheme
Ну это уже мелочь, ещё раз array_unique применить - просто же додумать базовую идею...

Код:
$data_array = array(1,2,3,3,3);
$unique = array_unique($data_array);
$duplicate = array_unique(array_diff_assoc($data_array, $unique));

Power of the lime madness...

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 03/06/09 в 12:43       Ответить с цитатойцитата 

Corex: а как ты думаешь, задача программера - использовать как можно меньше буквочег или таки написать оптимальный код? ;)

Почему я говорю, что нельзя начинать программировать с php - люди даже не задумываются, что под капотом у этих "волшебных" функций. array_diff, вообще-то - очень медленная функция. array_unuque - тоже. У тебя подряд 3 функции, у которых порядок O(N log N) в лучшем случае, а вообще-то, O(N^2) в худшем. Сэкономив несколько строк кода в сравнении с вариантом с array_count_values (который наиболее оптимален, кстати), в разы проигрываешь по производительности.

0
 

« ... full on ... »

С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686

Ссылка на сообщениеДобавлено: 03/06/09 в 14:29       Ответить с цитатойцитата 

Dr.Syshalt: а вот ты как думаешь, стоит ли начинать умничать, если сути ты даже и не понял? Ну перечитай же ты ещё раз тему с самого начала, проследи с какой точки и почему появились эти два варианта. Это ведь даже не альтернатива!

Хочется высказаться - так по сути, а то с превентивными проповедями и ведром помоев, что совершенно без толку. ;)

Power of the lime madness...

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 03/06/09 в 17:32       Ответить с цитатойцитата 

Ну если оценка производительности алгоритма считается у некоторых "умничать" и "флэймить, разводить holy wars" - то тут комменты излишни.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »