За последние 24 часа нас посетили 52178 программистов и 1759 роботов. Сейчас ищут 1195 программистов ...

Прерывание, продолжение цикла по клику

Тема в разделе "PHP для новичков", создана пользователем espltd, 24 янв 2017.

  1. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Погоди, я нашел проблему. Нормально он работает, взгляни внимательно на цифры которые я прописал, я оказывается продублировал некоторые, он видно их склеил как - бы. Я разные сейчас поставил цифры, все норм стало. Но спасибо за отзывчивость большое.
     
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Array ( [0] => Один [1] => Четыре [2] => Три [3] => Пять [4] => Яблоко )
    Это тебя не смущает?
    --- Добавлено ---
    А где кривизна кода твоего ты нашел? я нашел...
    --- Добавлено ---
    Вот так можно сделать в начале.
    А код свой поправь сам.
    Подсказывать не буду.

    PHP:
    1. $massInput = [345345=>'Один', 456456=>'Два', 567567=>'Три', 456486=>'Четыре', 567561=>'Пять', 345347=>'Яблоко'];
    2.  
    3. foreach ( $massInput as $value ) {
    4.  
    5. $mass[] = $value;
    6.  
    7. }
     
  3. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Спасибо тебе за все! :)))))) Я препода замучаю... Не с тем связался...
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Да на здоровье!
    Очень часто или почти всегда есть простые решения поставленных задач. До них просто нужно додуматься.
    Поэтому не впадай в ступор, как в начале этой темы :)
     
  5. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Дружище привет! Можешь мне еще помочь с одним заданием. Буду очень благодарен.

    Есть 2 массива.

    PHP:
    1. $arr_one = [0=>'888', 1=>'756', 2=>'233', 3=>'455'];
    2. $arr_two = [0=>'777', 1=>'555', 2=>'444', 3=>'455'];
    Мне нужно сверить их значения на дубликаты. Условие такое. Если в массиве $arr_two есть значения, которые есть в массиве $arr_one, то из первого массива их надо полностью удалить и распечатать массив без них. Я вот думаю, можно ли как-то без цикла сделать, может встроенные функции какие нибудь? Типа array_unique. Но это не много не то.

    Заранее, большое спасибо.
     
    #30 espltd, 25 янв 2017
    Последнее редактирование модератором: 25 янв 2017
  6. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @espltd А зачем без цикла? в цикде массивы перебирать - это вполне нормально и практикуется. Попробуй сам сделать. А я тебе помогу.
    Берешь первый элемент и сравниваешь его со всеми по очереди. Если находишь совпадение, то не сохраняешь первый элемент, если находишь то сохраняешь. Аналогично со вторым и со всеми остальными.
    Удалять ничего не нужно. Нужно не сохранять.

    Мне не сложно написать этот код. Это плевое дело. Еще проще чем то, что мы делали вчера. Но на этом форуме принято учить людей, а не всё делать за них :)
    Так что дерзай. Я в тебя верю.
     
  7. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Я сделал. Не много поразмышлял.


    Код (Text):
    1. foreach($arr_one as $key=>$item){
    2.     $used = $arr_two[$key];
    3.     if($used == $item)
    4.     unset($arr_one[array_search($used,$arr_one)]);
    5. }
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    TeslaFeo нравится это.
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @espltd этот код сравнивает первый элемент первого массива с первым элементом второго, второй со вторым и т. д.
    т. е. если первый элемент первого массива будет совпадать с любым, кроме первого, элементом второго массива, то код не найдет совпадений. Кроме того, если массивы будут разной длинны, то он тоже сработает не корректно.

    Вот оно, пивко в баре в место пар :)

    Тебе нужен цикл в цикле.
     
  10. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    блииннн...
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @espltd спокойненько покури иди и чайку попей. Лучшие идеи приходят когда ты не за компом.
     
  12. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Для каждого элемента ЭлементВторогоМассива Из ВторогоМассива Цикл
    Для каждого элемента ЭлементПервогоМассива Из ПервогоМассива Цикл
    Если ЭлементВторогоМассива = ЭлементПервогоМассива Тогда
    (Из ПервогоМассива удаляем данное значение)
    КонецЕсли
    КонецЦикла
    КонецЦикла

    Вроде так я понимаю задачу)
     
  13. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    До меня просто не доходит, для чего цикл в цикле, если я своим кодо итак получу значения первого массива и второго... Или я чего то не учитываю?


    Код (Text):
    1. foreach($arr_one as $key=>$item){
    2.     $used = $arr_two[$key];
    3.     if($used == $item)
    4.     unset($arr_one[array_search($used,$arr_one)]);
    5. }
     
  14. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @espltd, ты попробовал функцию которую я тебе предложил выше?
     
  15. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Да. я попробовал. Эх, наверное мне стоило задачу целиком объяснить. Я не учел нескольких моментов. Из за этого тоже видно гемор возникает.

    Есть 2 текстовых файла(one.txt, two.txt). В файлике two.txt находятся циферки 222 - построчно, ну тоже самое написать 222 и нажать ентер. 3333 и нажать ентер. Построчно. В файлике one.txt тоже разные цифры - построчно и какие-то такие же как и в файле two.txt. При запуске программы у меня загружается содержимое файла one.txt в массив с находящимися в нем элементами. Для этого я использовал функцию file(); А вот теперь самое главное, программа должна записать значения из файла one.txt в two.txt но без дубликатов. Программа сверяет, что в файле two.txt уже есть значение 777, а значит данное значение мы удаляем из one.txt .... Надеюсь понятно объяснил. У меня уже голова болит от этого задания...
     
  16. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @espltd, тебе остается записать результат работы функции в файл
    --- Добавлено ---
    Если конечно я все правильно понял.
     
  17. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Вот это важная часть задачи, которой не было в посте с описанием. На выходе нужно получить третий массив, содержащий все значения без дубликатов.
     
  18. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    mahmuzar то красавчиком оказался. Я не знал про существование этой функции. Тогда всё совсем просто и не нужен цикл в цикле :)

    PHP:
    1. $arr1 = [223, 456, 122, 545, 355, 675];
    2.  
    3. $arr2 = [432, 642, 223, 753, 864, 135, 355, 246];
    4.  
    5. $arr3 = array_diff($arr1, $arr2); // получаешь массив элементов, которые встречаются в первом массиве,
    6.                                                   // но не встречаются во втором
    7. foreach ( $arr3 as $value ) {
    8.  
    9. $arr2[] = $value; // дописываешь уникальные элементы массива
    10.  
    11. }
    12. // перезаписываешь файл значениями из arr2
    @espltd, ты всему научишься при желании.
    Это задача простейшая, но видимо нужно обладать каким то мышлением, чтобы это понимать.
    Наверное, те, кто этим мышлением обладают и сами не понимают этого...
    --- Добавлено ---
    Я с файлами не работал никогда, поэтому точно не знаю как это работает.
    Если в файл можно просто дописать, то допиши arr3 и foreach вообще не нужен, а если файл полностью перезаписывается, то foreach нужен и перезаписывать надо arr2.
    --- Добавлено ---
    Ты получишь правильный результат потому, что у тебя в двух массивах совпадают и ключи и значения одного из элементов, а если значения будут совпадать, а ключи будут разные, то ты не получишь желаемого результата. Понимаешь?
    --- Добавлено ---
    У тебя в голове пивко и девочки, поэтому ты учишься по принципу ЗЗЗ - Зазубрил Здал Забыл.
    Это прокатывает с историей, философией и с любой другой гуманитарной хренью.
    Но тут надо понимать как всё работает.
     
    denis01 нравится это.
  19. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Спасибо всем за помощь! Огромное спасибо... Есть у меня дурацкая привычка, не базу изучать, а сразу лезть в какие нить дебри и ломать там голову, а вот порой понимаешь, что самое сокровенное - это база(базовые знания)... Мдаааа... Большое спасибо всем за помощь! Очень благодарен!!!!
     
  20. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Блин ребят! Звиздец! Я такого препода впервые вижу. Он просто валит... и валит... Нужна помощь...

    Опять по прежнему имеем два файла - one.txt, two.txt

    при нажатии на кнопку и послании post запроса, нужно сверить, что если в two.txt есть такие же значения как и в файде one.txt, то мы должны их затереть в файле one.txt и распечатать полученный массив. Пост запрос я послал, распечатать массив умею, а как обработать эти долбанные дубликаты??? Меня уже трясет от этого препода((((((((((((((((((((((((((((((((((o_O:mad::(:(:(
     
  21. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    вопрос по другому ставь, какой структурой представлены данные, если массивом например, то есть функции которые работают с массивами и могут выдать дубликаты https://secure.php.net/manual/ru/ref.array.php
     
  22. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    ДА, массивами. Я делаю так:

    Код (Text):
    1. $massInput = file('one.txt', FILE_IGNORE_NEW_LINES);
    2.     $massUsed = @file('two.txt', FILE_IGNORE_NEW_LINES);

    В файле one.txt данные записаны построчно:
    такого вида:

    324234
    222222
    333333
    444444
    555555

    Считываются в массив $massInput. И если например в файле two.txt есть 444444 и есть 333333, то нужно удалить/стереть эти элемены из файла one.txt, чтобы никаких пустых строк, чтобы именно остались нормальные значения. И распечатать полученный массив. Вот это меня и прибило((( Нужна помощь. не одолеть
     
  23. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Он тебя валит, скорее всего, потому, что понимает, что ты это делаешь не сам.
    И нервами проблему не решить. Тут нужно спокойно подойти к процессу и всё сделать.
    Теперь успокойся, попей чайку, покури и опиши нормально, что нужно сделать. Потому, что у меня ощущение что мы уже делали что-то очень похожее...
    --- Добавлено ---
    в смысле "распечатать"?
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    вывести в браузер результат, думаю так
     
    TeslaFeo нравится это.
  25. espltd

    espltd Новичок

    С нами с:
    11 авг 2015
    Сообщения:
    47
    Симпатии:
    2
    Объясняю. Спокойно. Без нервов;)
    В папке проекта лежат 2 файла (one.txt, two.txt);

    Изначально мы распечатываем массив файла one.txt(это я сделал через функцию file и сохранил в $massInput).
    С помощью

    print '<pre>';
    print_r($massInput);
    print '</pre>';

    Я печатаю массив и получаю содержимое которое в файле записано построчно. Вид содержимого в файле:

    222222
    333333
    444444
    555555

    Массив распечатали - все норм. Это при условии, что во втором файле two.txt нет этих значений, которые содержаться в первом one.txt файле. А вот если в файл two.txt добавим например:

    333333
    555555

    и обновим страницу, программа должна понять, что значение 333333, 555555 есть в файле two.txt, а значит мы их удаляем из one.txt - именно эти найденные значения!!!

    В итоге в файле one.txt должно остаться:

    222222
    444444

    и соответственно распечатать полученный обработанный массив из файла one.txt !!!)) Надеюсь объяснил понятно))) Препод всех валит, злыдень программный(