Доброго дня! Подскажите пожалуйста, если кто решал подобную задачу. Есть у меня массив элементов. Например: Код (Text): $arr = [0,1,2,3,4,5]; for($i=0; $i<6; $i++) { echo $arr[$i].'<br/>'; } Таким образом я выведу 6 элементов с переносом строки. А мне нужно сделать так, чтобы при послании Post запроса ( при нажатии на кнопку) у меня показывалось по одному элементу из массива. Т.е. мне не надо их в куче. Допустим сперва по дефолту выводится 0. Далее, когда я нажимаю на кнопку, у меня выводится следующий элемент массива, снова нажал на кнопку, и опять следующий элемент массива. Вот не могу сообразить как это сделать. Подскажите пожалуйста. Может все на много проще чем я думал? Вот то, что пытался сделать. Код (Text): $counter=0; if($_POST['sub']){ for($i=0; $i<1; $i++){ $counter++; } } echo $idMass[$counter]; Но совершенно не "втыкаю" как вытащить каждый последующий элемент при нажатии на кнопку. Еще было бы здорово, чтобы можно было не только вперед сделать но и назад. Я имею ввиду инкремент/дикремент. Заранее спасибо.
Стартуешь сессию, записываешь в неё состояние. (ну или не сессию, не важно. главное где-то надо хранить состояние). При загрузке страницы проверяешь состояние и выводишь нужный по счёту элемент массива
Ну да... это задача для профи... У нас на форуме и людей таких нет наверное... Один заходит раз в неделю. Пригласим его в эту тему. --- Добавлено --- О! А вот и он! Повезло же тебе!
Кажется врубился. Была мысль использовать куку, но почему-то потом желание улетучилось. спасибо за подсказку
@espltd Если это для препода и надо обязательно пост запросом то в запросе же можешь отправлять текущий элемент массива заранее подготовив <input type="hidden" value="<?php echo "ключ текущего элемента массива"; ?>" /> при формировании страницы. Но такие элементарные вопросы задавать в php для профи - это смешно)))
Насчет профи согласен. Просто на каком-то из форумов в ветке профи отвечают быстрее нежели в новичках. Вот и решил по такому методу вопросы задавать. Да, ты прав. Надо для препода. Но видишь дело в чем. Меня эта задачка выбивает из колеи. Препод дал простой массив с данными. Двумерный кстати. И сказал вот надо, чтобы каждый элемент из массива показывался по отдельности. Сперва первый. Внизу сделать две кнопки. назад, вперед. Напоминает пагинацию, не правда ли? И когда нажимаешь вперед, у тебя показывается следующий элемент массива, а когда назад, то предыдущий. Кажется, что вроде задачка плевая. Но вот как её реализовать, до меня лично не доходит. Как именно выводить по отдельности, да еще и указатель в массиве по кнопке двигать, то вперед, то назад. Блиииинннн
давай двумерный массив который дал этот деспот. Ща разберемся. Он тебе сказал каким то определенным образом решить или как хочешь? Просто если сделать всё слижком правильно то он может не поверить
Да массив обычный. Без какой либо вложенности. Тупо $mass = [0=>'Один', 1=>'Два', 2=>'Три', 3=>'Четыре', 4=>'П'ять]; Выводить элементы по одному. Не в куче. Вот зашел на страницу, смотрю у меня выводится по умолчанию первый эл массива - Один. Внизу кнопки назад вперед. Нажал вперед у меня выводится - Два, далее нажал вперед выводится Три, нажал назад, выводится - Два. Показываться они должны по одному!
Лучше конечно правильный вариант. Я смогу расказать что такое continiue, next, prev. Просто как применить в данной задаче - не пойму.
Вот этого преподу должно хватить. PHP: <?php $mass = [0=>'Один', 1=>'Два', 2=>'Три', 3=>'Четыре', 4=>'Пять']; if ( !isset( $_POST['key'] ) ) { $key = 0; } else { $key = $_POST['key']; if ( isset( $_POST['next'] ) AND $key < 4 ) { $key = $key + 1; if ( $key == 4 ) $disN = "disabled"; else $disN = ""; } if ( isset( $_POST['back'] ) AND $key > 0 ) { $key = $key - 1; if ( $key == 0 ) $disB = "disabled"; else $disB = ""; } } $val = $mass[$key]; echo " <form method='post' > <input type='hidden' name='key' value='$key' /> <input type='submit' name='back' value='BACK' $disB /> $val <input type='submit' name='next' value='NEXT' $disN /> </form> "; ?> Можно сделать лучше, но препод может не поверить, что ты раздолбай и бездельник додумался до чего-то лучшего. А циклы и, тем более, их прерывания тут не нужны. --- Добавлено --- Это тоже одномерный. Вот тут вся инфа.
Дружище, спасибо тебе большое. Я только чуть чуть прибрался. Мне главное было понять как можно заставить это работать. Я знал, что как-то можно без цикла это реализовать, только не понимал как. Спасибо. Код (Text): $mass = [0=>'Один', 1=>'Два', 2=>'Три', 3=>'Четыре', 4=>'Пять', 5=>'Яблоко']; if(!isset($_POST['key'])) { $key=0; }else{ $key = $_POST['key']; if(isset($_POST['next']) AND $key < count($mass)) { $key++; } if(isset($_POST['back']) AND $key > 0) { $key--; } } $val=$mass[$key]; ?> <form method="POST"> <input type='hidden' name='key' value='<?=$key;?>' /> <input type='submit' name='back' value='BACK'/> <input type='submit' name='next' value='NEXT'/> <?='<br/><br/>'.$val;?> </form> --- Добавлено --- Бляха муха. Да что ж такое то! Я ему прислал, он уже ответил. Говорит, а если вместо ключей я сделаю цифры в разнобойном порядке. Например $mass = [234=>'', 542345=>'', 54654=>'']; спрашивает, что будет тогда. Я ему пишу, что скрипт сломается. Он говорит а как сделать, чтобы не сломался??? Ребят выручайте.... Он задрал уже придираться. Молодой чувак, амбициозный....
Ну смотри., он сказал, что ты перемещаешься по ключам, а если не будет 1,2,3,4 ключей, а просто будет набор цифр, типа 234234, 345345345, 36456345, 654563, то по ним уже не получится
Скорее всего он от тебя хочет вот этого. Но я бы на твоем месте прикололся с него вот так: PHP: $mass = [234=>'один', 542345=>'два', 54654=>'три']; $mass = array_values($mass); это встроенная функция php которая сбрасывает ключи массива к виду 0, 1, 2 т. е. на выходе получится такой же массив который мы с тобой уже обработали. А значит весь дальнейший код не сломается. Если спросит где взял - скажи нагуглил. Пусть не думает что умный дохера... Но если не спросит то ничего не говори. (и тут должен быть смех злодея из какого-нить мультика ) вот у него бомбанет))) хотя может быть он от тебя хочет именно эту функцию и у меня просто фантазия разыгралась))
Твой вариант интересен. Но есть одно но. Почему-то показывает не с начала массива, а с конца. Т.е. начинает с яблоко, хотя так не должно ведь быть. Код (Text): $massInput = [345345=>'Один', 456456=>'Два', 567567=>'Три', 456456=>'Четыре', 567567=>'Пять', 345345=>'Яблоко']; $mass = array_values($massInput); if(!isset($_POST['key'])) { $key=0; }else{ $key = $_POST['key']; if(isset($_POST['next']) AND $key < count($mass)) { $key++; } if(isset($_POST['back']) AND $key > 0) { $key--; } } $val=$mass[$key];
Не надо пытаться поиметь систему, ломая ее логическую структуру. Система может обидеться. Перенесено в вопросы для новичков.
я подозреваю, что у тебя была загружена страница с <input type="hidden" value="5" /> и ты отредактировал скрипт и обновил страницу с повторной отправкой формы. Нет?
Слушай, все обновил, прямо сейчас повторил, почистил кеш в браузере. Начинает с яблоко. Хмм.... че ж такое. В value hidden 0!
Я бы попробовал решить данную задачу т.о.: если заходишь на страницу по ссылке, то выводишь первый элемент массива и ниже кнопку "Вперед", предварительно найдя следующее значение массива и вставив его в данную кнопку. Перейдя на след. страницу выводишь кнопки "Назад" и "Вперед" предварительно засунув в кнопку "Назад" предыдущее значение массива, а в кнопку "Вперед" - следующее значение массива. А если следующего значения массива нет, то не выводишь кнопку "Вперед" - оставляешь только кнопку "Назад".
Это сейчас посмотрим. А код ты "причесал" криво, ибо если нажимать на право до предела, то в конце выводится пустое значение.
array_values работает не так как я думал. Сортирует не по порядку а как то по другому. Я не стал вникать. Его аналогов я к сожалению не нашел, а меня зовет реал. Но есть вариант прогнуться под деспота. Это цикл для перебора массивов. Если подумаешь, то сможешь сам сделать. Цикл прерывать не надо. Просто в переменную либо сохраняешь либо не сохраняешь в зависимости от условий. Я в тебя верю