Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Нужна функция обработки простого одномерного массива
Новая тема
Ответить
цитата
02/06/09 в 17:17
webmaster779
Имеется массив с уникальными и неуникальными значениями. Нужно на выходе сформировать два массива $unique и $nonunique. В первом содержатся значения, которые встречаются только один раз, во втором - два и более. Кто возьмется?
цитата
02/06/09 в 17:27
True Alex
array_count_values не подходит? разделить результирующий массив на два - это дело техники уже
http://ru.php.net/manual/en/function.array-count-values.php
цитата
02/06/09 в 17:51
Scheme
Код:
<?
// $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>";
?>
за отзыв возьмусь. отзывы оставлять в подписи
цитата
02/06/09 в 19:31
webmaster779
Спасибо! array_count_values конечно лучший вариант.
цитата
02/06/09 в 21:04
_s_[sov]
Код:
array_unique();
цитата
02/06/09 в 21:07
Scheme
_s_[sov] писал:
Код:
array_unique();
создает массив с неповторяющимися элементами. то есть было 1233, станет 123.
не подходит, а так было бы неплохо конечно сделать array_unique а потом array_diff - вообще пара строк кода )
цитата
02/06/09 в 21:08
_s_[sov]
Scheme:
Цитата:
которые встречаются только один раз
все верно делает эта функция... сам же ниже ее предложил
цитата
02/06/09 в 23:18
Corex
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);
цитата
03/06/09 в 07:33
Scheme
2Corex
тз: "В первом содержатся значения, которые встречаются
только один раз
, во втором - два и более."
то есть был массив 12333, на выходе будут массивы 12 и 3.
твой вариант в первый массив затолкает 123, во второй - 33.
цитата
03/06/09 в 09:36
Corex
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));
цитата
03/06/09 в 12:43
Dr.Syshalt
Corex:
а как ты думаешь, задача программера - использовать как можно меньше буквочег или таки написать оптимальный код? ;)
Почему я говорю, что нельзя начинать программировать с php - люди даже не задумываются, что под капотом у этих "волшебных" функций. array_diff, вообще-то - очень медленная функция. array_unuque - тоже. У тебя подряд 3 функции, у которых порядок O(N log N) в лучшем случае, а вообще-то, O(N^2) в худшем. Сэкономив несколько строк кода в сравнении с вариантом с array_count_values (который наиболее оптимален, кстати), в разы проигрываешь по производительности.
цитата
03/06/09 в 14:29
Corex
Dr.Syshalt:
а вот ты как думаешь, стоит ли начинать умничать, если сути ты даже и не понял? Ну перечитай же ты ещё раз тему с самого начала, проследи
с какой точки
и
почему
появились эти два варианта. Это ведь даже не альтернатива!
Хочется высказаться - так по сути, а то с превентивными проповедями и ведром помоев, что
совершенно без толку
. ;)
цитата
03/06/09 в 17:32
Dr.Syshalt
Ну если оценка производительности алгоритма считается у некоторых "умничать" и "флэймить, разводить holy wars" - то тут комменты излишни.
Новая тема
Ответить
Эта страница в полной версии