За последние 24 часа нас посетил 22701 программист и 1560 роботов. Сейчас ищут 874 программиста ...

Ошибка в решении

Тема в разделе "PHP для новичков", создана пользователем Алексей87К, 13 янв 2017.

Метки:
  1. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Здравствуйте! Имеется следующая задача:
    - Сделайте аналог функции array_unique (осуществляет удаление повторяющихся элементов из массива.)
    Моё решение:
    PHP:
    1. $arr = array(1,1,2,3,4,4,5);
    2.  
    3.  
    4. function new_un($x){
    5.  
    6. $n_arr = array();
    7. $count = 0;
    8. $i = 0;
    9.  
    10. foreach($x as $new_arr){
    11.   $n_arr[] .= $new_arr;
    12. }
    13.  
    14.     for($j = 0; $j < count($x); $j++){
    15.        if($n_arr[$i] == $x[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1
    16.         $count++;
    17.          if($count == 2){
    18.              unset($x[$j]);
    19.          }
    20.        }
    21.    }
    22. }    
    23. new_un($arr);
    В чем проблема? : Проблема появилась, когда я обернул код в функцию. Если до этого, браузер показывал: $arr = array(1,2,3,4,4,5); - без второй единицы, то после обертки в функцию - чистый экран.
    1) Прошу помочь с выводом на экран данного кода на экран
    2) Прошу по корректировать(или дать намёк, что делать) код так, чтобы он работал.
    P.S. Убедительная просьба! Я знаю, что ваше решение будет проще и лучшего моего. Но я это код писал долго, перепробовав остальные варианты (не знаю, почему так затормозил с решением этого задания, не спрашивайте). Поэтому, если можно, помогите с этим кодом, а потом можете свой написать. Спасибо!
     
  2. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    включи вывод ошибок.
    В самом верху файла добавь
    PHP:
    1. ini_set('error_reporting', E_ALL);
    2. ini_set('display_errors', 1);
    3. ini_set('display_startup_errors', 1);
     
    Алексей87К нравится это.
  3. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Огромное спасибо добавил! вывел:Notice: Undefined offset: 1. Я добавил sort(); так он вывел: Notice: Undefined offset: 6 . То есть последний элемент! Что с ним делать?
     
  4. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    погоди. всё ж работает. У меня во всяком случае всё завелось, как надо.
    Ты просто забыл вывести данные. Функция должна что-то возвращать, это return $arr. Вызов функции должен как-то отображать эти данные. Можно var_dump(new_un($arr));
     
  5. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Новый код:
    PHP:
    1. $arr = array(1,1,2,3,4,4,5);
    2.  
    3.  
    4. function new_un($x){
    5.  
    6. $n_arr = array();
    7. $count = 0;
    8.  
    9. foreach($x as $new_arr){
    10.   $n_arr[] .= $new_arr;
    11. }
    12.  
    13.   for($i = 0; $i < count($x); $i++){
    14.     for($j = 0; $j < count($x); $j++){
    15.        if($n_arr[$i] == $x[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1 И СНОВА СОВЕРШАЛСЯ БЫ ПРОХОД ПО ПЕРЕМЕННОЙ $j
    16.         $count++;
    17.          if($count == 2){
    18.              unset($n_arr[$j]);
    19.              sort($n_arr);
    20.          }
    21.        }
    22.     }
    23.   }
    24.   return $n_arr;
    25. }    
    26. new_un($arr);
     
  6. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    PHP:
    1. $arr = array(1,1,2,3,4,4,5);
    2. function new_un($x){
    3. $n_arr = array();
    4. $count = 0;
    5. $i = 0;
    6. foreach($x as $new_arr){
    7.   $n_arr[] .= $new_arr;
    8. }
    9.     for($j = 0; $j < count($x); $j++){
    10.        if($n_arr[$i] == $x[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1
    11.        $count++;
    12.          if($count == 2){
    13.              unset($x[$j]);
    14.          }
    15.        }
    16.    }
    17.    return $n_arr;
    18. }  
    19. var_dump(new_un($arr));
     
  7. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Странно ... У вас работает? Отправьте пожалуйста код!
     
  8. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    отправил выше
     
  9. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Скопировал! Вывел на экран! Но он не удалил дубли( Перепроверял... Всё тоже самое! У вас разве, он удалил дубли?
     
  10. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    нет. не удалил. логика скрипта не верна, видимо
     
  11. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Да, логика( Может завтра что-то получиться! Всё равно, спасибо!!!
     
  12. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Почему-то я сразу представил картину: стоит мужик и глазом пытается открыть бутылку. Пытается долго, упорно и при этом просит прохожих помочь именно с этим способом. Хотя, для того, чтобы открыть бутылку, есть масса нормальных или удобных способов: начиная от специальных инструментов, заканчивая забором или углом дома. :)
    Озарение под конец рабочего дня! Я бы вам посоветовал утро начать с пересмотра логи и разумное решение найдётся.
     
  13. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    ты решил свой пхп написать ? то одну функцию переписываешь , то другую...
    а по теме вот тебе =))
    http://phpfiddle.org/main/code/0r4w-n60j
    PHP:
    1. <?php
    2. $arr = array(1,1,1,2,3,4,4,5,66,6,66);
    3.  
    4. function new_un($x){
    5. $n_arr = array();
    6. $count = 0;
    7. $count_arr = count($x);
    8.     /*
    9. foreach($x as $new_arr){
    10.   $n_arr[] .= $new_arr;
    11. }*/
    12. $n_arr=$x;
    13.   for ($i = 0; $i < $count_arr ; $i++){    
    14.     $n_arr_count =     count($n_arr) ;
    15.      $count=0;
    16.     for($j = 0; $j < $n_arr_count ; $j++){
    17.        if($x[$i] == $n_arr[$j]){ # НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1
    18.       $count++;
    19.          if($count >= 2){
    20.              //$count=1;
    21.              array_splice ($n_arr,$j,1);
    22.              $n_arr_count--;
    23.              //unset($x[$j]);
    24.          }
    25.        }
    26.     }}
    27.      
    28.    return $n_arr;
    29. }
    30.  
    31. foreach (new_un($arr) as $key=>$val)
    32. {
    33.     echo $key."=".$val."<br>";
    34.    
    35. }
    36.  
    37. ?>
    Хоть расслабился немного :D
     
    #13 Slavka, 13 янв 2017
    Последнее редактирование: 13 янв 2017
    Алексей87К нравится это.
  14. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    ) Такие задание в учебники! Вот, выполняю, чтобы научиться программировать! Скажите пожалуйста, Для вас, я так понимаю, такие задачки это семечки! А как вы начинали учить, что можете подсказать. Как к этому правильно подходить... Просто решать всё подряд?
    P.S. Спасибо вам большое за помощь!
     
  15. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а у меня и учебника то не было =) хотелка была .. а потом пошло поехало.
    самое главное что программист должен воспитать в себе это логика !
    вот даже вы сами себе пишете

    if($n_arr[$i]==$x[$j]){# НУЖНО, ЧТОБЫ ПРИ ПОЛНОМ ПРОХОДЕ $j ПЕРЕМЕННАЯ $i УВЕЛИЧИВАЛАСЬ НА 1

    и это правильно - но не реализован был второй цикл который это увеличивал .. в чем логика ? :D