Здравствуйте! Имеется следующая задача: - Сделайте аналог функции array_unique (осуществляет удаление повторяющихся элементов из массива.) Моё решение: PHP: $arr = array(1,1,2,3,4,4,5); function new_un($x){ $n_arr = array(); $count = 0; $i = 0; foreach($x as $new_arr){ $n_arr[] .= $new_arr; } for($j = 0; $j < count($x); $j++){ if($n_arr[$i] == $x[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1 $count++; if($count == 2){ unset($x[$j]); } } } } new_un($arr); В чем проблема? : Проблема появилась, когда я обернул код в функцию. Если до этого, браузер показывал: $arr = array(1,2,3,4,4,5); - без второй единицы, то после обертки в функцию - чистый экран. 1) Прошу помочь с выводом на экран данного кода на экран 2) Прошу по корректировать(или дать намёк, что делать) код так, чтобы он работал. P.S. Убедительная просьба! Я знаю, что ваше решение будет проще и лучшего моего. Но я это код писал долго, перепробовав остальные варианты (не знаю, почему так затормозил с решением этого задания, не спрашивайте). Поэтому, если можно, помогите с этим кодом, а потом можете свой написать. Спасибо!
включи вывод ошибок. В самом верху файла добавь PHP: ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1);
Огромное спасибо добавил! вывел:Notice: Undefined offset: 1. Я добавил sort(); так он вывел: Notice: Undefined offset: 6 . То есть последний элемент! Что с ним делать?
погоди. всё ж работает. У меня во всяком случае всё завелось, как надо. Ты просто забыл вывести данные. Функция должна что-то возвращать, это return $arr. Вызов функции должен как-то отображать эти данные. Можно var_dump(new_un($arr));
Новый код: PHP: $arr = array(1,1,2,3,4,4,5); function new_un($x){ $n_arr = array(); $count = 0; foreach($x as $new_arr){ $n_arr[] .= $new_arr; } for($i = 0; $i < count($x); $i++){ for($j = 0; $j < count($x); $j++){ if($n_arr[$i] == $x[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1 И СНОВА СОВЕРШАЛСЯ БЫ ПРОХОД ПО ПЕРЕМЕННОЙ $j $count++; if($count == 2){ unset($n_arr[$j]); sort($n_arr); } } } } return $n_arr; } new_un($arr);
PHP: $arr = array(1,1,2,3,4,4,5); function new_un($x){ $n_arr = array(); $count = 0; $i = 0; foreach($x as $new_arr){ $n_arr[] .= $new_arr; } for($j = 0; $j < count($x); $j++){ if($n_arr[$i] == $x[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1 $count++; if($count == 2){ unset($x[$j]); } } } return $n_arr; } var_dump(new_un($arr));
Скопировал! Вывел на экран! Но он не удалил дубли( Перепроверял... Всё тоже самое! У вас разве, он удалил дубли?
Почему-то я сразу представил картину: стоит мужик и глазом пытается открыть бутылку. Пытается долго, упорно и при этом просит прохожих помочь именно с этим способом. Хотя, для того, чтобы открыть бутылку, есть масса нормальных или удобных способов: начиная от специальных инструментов, заканчивая забором или углом дома. Озарение под конец рабочего дня! Я бы вам посоветовал утро начать с пересмотра логи и разумное решение найдётся.
ты решил свой пхп написать ? то одну функцию переписываешь , то другую... а по теме вот тебе =)) http://phpfiddle.org/main/code/0r4w-n60j PHP: <?php $arr = array(1,1,1,2,3,4,4,5,66,6,66); function new_un($x){ $n_arr = array(); $count = 0; $count_arr = count($x); /* foreach($x as $new_arr){ $n_arr[] .= $new_arr; }*/ $n_arr=$x; for ($i = 0; $i < $count_arr ; $i++){ $n_arr_count = count($n_arr) ; $count=0; for($j = 0; $j < $n_arr_count ; $j++){ if($x[$i] == $n_arr[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1 $count++; if($count >= 2){ //$count=1; array_splice ($n_arr,$j,1); $n_arr_count--; //unset($x[$j]); } } }} return $n_arr; } foreach (new_un($arr) as $key=>$val) { echo $key."=".$val."<br>"; } ?> Хоть расслабился немного
) Такие задание в учебники! Вот, выполняю, чтобы научиться программировать! Скажите пожалуйста, Для вас, я так понимаю, такие задачки это семечки! А как вы начинали учить, что можете подсказать. Как к этому правильно подходить... Просто решать всё подряд? P.S. Спасибо вам большое за помощь!
а у меня и учебника то не было =) хотелка была .. а потом пошло поехало. самое главное что программист должен воспитать в себе это логика ! вот даже вы сами себе пишете if($n_arr[$i]==$x[$j]){# НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1 и это правильно - но не реализован был второй цикл который это увеличивал .. в чем логика ?