прожектор перестройки
С нами с 13.10.05
Сообщения: 1406
Рейтинг: 636
|
Добавлено: 02/06/09 в 17:17 |
Имеется массив с уникальными и неуникальными значениями. Нужно на выходе сформировать два массива $unique и $nonunique. В первом содержатся значения, которые встречаются только один раз, во втором - два и более. Кто возьмется?
|
|
|
|
I L♥VE G♀RLZ
С нами с 28.11.07
Сообщения: 694
Рейтинг: 378
|
Добавлено: 02/06/09 в 17:27 |
|
|
|
|
С нами с 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>";
?> |
за отзыв возьмусь. отзывы оставлять в подписи
|
|
|
|
прожектор перестройки
С нами с 13.10.05
Сообщения: 1406
Рейтинг: 636
|
Добавлено: 02/06/09 в 19:31 |
Спасибо! array_count_values конечно лучший вариант.
|
|
|
|
php
С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410
|
Добавлено: 02/06/09 в 21:04 |
|
|
|
|
С нами с 27.03.09
Сообщения: 155
Рейтинг: 320
|
Добавлено: 02/06/09 в 21:07 |
создает массив с неповторяющимися элементами. то есть было 1233, станет 123.
не подходит, а так было бы неплохо конечно сделать array_unique а потом array_diff - вообще пара строк кода )
|
|
|
|
php
С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410
|
Добавлено: 02/06/09 в 21:08 |
Scheme: Цитата: | которые встречаются только один раз |
все верно делает эта функция... сам же ниже ее предложил
|
|
|
|
« ... 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.
|
|
|
|
« ... 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 (который наиболее оптимален, кстати), в разы проигрываешь по производительности.
|
|
|
|
« ... 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" - то тут комменты излишни.
|
|
|
|