#php #loops
#php #циклы
Вопрос:
Я только начал изучать кодирование и PHP, поэтому я рассматривал возможность практиковать то, что я узнал до сих пор, однако я не уверен, насколько эффективно или неэффективно мое кодирование. Я был бы признателен за ваши комментарии к циклу ниже. Это простой цикл, и я прокомментировал его более простой пример. Я был бы признателен за любой совет о том, как я могу улучшить свое кодирование.
//Initialize page
$startpage = isset($_POST['page']) ? $_POST['page'] : 1;
$endpage = 11;
//Loop through the start and end of the page
while($startpage < $endpage) {
if(isset($_POST['submit'])) {
$startpage=$startpage 1;
}
if($startpage < $endpage) {
break;
}
}
//Alternative option
// if(isset($_POST['submit'])) {
// if($startpage < $endpage) {
// $startpage = $startpage 1;
// }
// }
Редактировать
Причина, по которой я выполняю проверку $ _POST, заключается в том, что я хочу, чтобы пользователь переходил с одной страницы на следующую только после отправки.
Ответ №1:
С тем, что вы закодировали, нет, это ужасно неэффективно;p. технически вы можете заменить свой код на
if(isset($_POST['submit']) amp;amp; $startpage < $endpage){
$startpage = $endpage;
}
поскольку ваша логика на самом деле ничего не делает, кроме увеличения $startpage
до тех пор, пока оно не станет равным $endpage
. В качестве лакомый кусочек, для увеличения на единицу вы можете сделать $startpage ;
Вашего комментария //Loop through the start and end of the page
также … не должно быть там, потому что это не имеет никакого смысла, определенно лучше не иметь комментария, если ваш комментарий на самом деле не имеет смысла в том, что происходит IMO. Это отчасти объясняет, что вы пытаетесь сделать, но я все еще в замешательстве: P.
Как и все остальные, вы, похоже, не совсем понимаете, как работает цикл while, но если вы можете утверждать обратное, я беру свои слова обратно :).
Вот мое объяснение while
цикла.
while
Цикл повторяется так часто, как верно условие, которое вы ставите рядом с ним. Итак, если вы каждый раз произносите while($number is less than 11)
, а затем увеличиваете $number на единицу, вам не нужно делать это break;
из цикла, когда $number is less than 11
вручную, поскольку это то, что циклы выполняют автоматически.
Комментарии:
1. Спасибо за предложение кода, и я согласен, приведенный вами пример, безусловно, кажется более чистым. Возможно, я не совсем понял пример, над которым работаю. Я попробую еще раз. Вы начинаете с первой страницы и можете перейти на страницу 2 только после отправки формы, отсюда и $_POST[‘отправить’]. Теперь предположим, что вы находитесь на странице 1 и нажимаете отправить, выполняется код
if(isset($_POST['submit'])) { $startpage=$startpage 1;
, который увеличивается на 1 и переходит к выполнению следующего фрагмента кода, т. Е.if($startpage < $endpage) { break; }
2. Продолжение выше, теперь, видя, что цикл может увеличиваться только при наличии post, цикл while будет продолжать выполняться вечно. Разрыв находится на странице, потому что я хочу перейти к следующей странице, т. е. 2, и не продолжать цикл до 11, поскольку следующее приращение должно управляться пользователем, т. Е. $ _POST . Если вы закомментируете код
if($startpage < $endpage) { break;
}, вы увидите, что он будет зацикливаться вечно после отправки формы. Надеюсь, я выразился яснее.3. Ах, ха, это означает, что вы используете
while
цикл, когда на самом деле вы должны быть простоif
инструкцией.if(isset(post) amp;amp; $startpage < $endpage) $startpage ;
на самом деле это все, что вам нужно. Похоже, у вас действительно нет ничего, что нужно зацикливать, поэтому вы создали что-то, что запускает цикл, а затем завершается, как только он выполняется. Вы создали оператор if из структуры цикла ;).4. @PeanutsMonkey Я думаю, вы используете a while, потому что вы «предвидите», что это должно продолжать увеличиваться, когда на самом деле их количество нужно увеличивать только один раз за посещение страницы.
5. Я бы согласился с тем, что я придумал оператор if вне цикла. Вы заметите более простую версию моего кода ниже, которая была закомментирована, хотя и не такая элегантная, как вы предлагаете, т.е. if(isset (post) amp;amp; $startpage < $endpage) $startpage ;. Будем иметь это в виду. Помимо практики, мне еще предстоит научиться, когда использовать соответствующие утверждения. Я пытаюсь принять мантру keep it simple, однако часто вижу, что несколько операторов if неэффективны. Спасибо за ваши предложения и рекомендации.
Ответ №2:
Я не совсем уверен, что вы пытаетесь сделать, но, похоже, for
цикл был бы более читабельным.
$startpage = isset($_POST['page']) ? $_POST['page'] : 1;
$endpage = 11;
for($i=$startpage; $i<$endpage; $i )
{
// do something
}
Возможно, это личные предпочтения, но while более полезен, когда вы хотите перебирать массив результатов или когда вы хотите продолжать проверять результат другой функции, прежде чем делать что-то еще.
Комментарии к вашему коду конкретно:
- Вы можете переписать
$startpage=$startpage 1;
как$startpage ;
isset($_POST['submit'])
это даст вам один и тот же ответ при каждом запуске цикла, поэтому установите результат в качестве переменной перед запуском цикла.
Комментарии:
1. Спасибо. Единственная причина, по которой я выписываю весь код, т.е. $ startpage = $ startpage 1, заключается в моем собственном понимании, прежде чем я начну писать код сокращенно. Я не осознавал, что while более полезен при циклическом просмотре массива. Есть ли какая-либо информация, рекомендующая, какие циклы использовать?
2. Какие циклы работают лучше всего, зависит от личных предпочтений и опыта. Тем не менее, я бы настоятельно рекомендовал прочитать что-то вроде Code Complete для получения подобных советов.
Ответ №3:
Я не уверен, что вы пытаетесь здесь сделать. Этот цикл будет выполняться только один раз из-за if
инструкции. Если вы пытаетесь напечатать номера страниц от $startpage
до $endpage
, вы можете просто сделать это:
$startpage = isset($_POST['page']) ? $_POST['page'] : 1;
$endpage = 11;
while($startpage < $endpage) {
$startpage=$startpage 1;
}
На самом деле, почему вы проверяете $_POST['submit']
здесь?
Комментарии:
1. Извините, я должен обновить свой первоначальный пост, поскольку я должен был упомянуть, что я пытаюсь переходить с одной страницы на следующую за раз, что происходит только после того, как пользователь отправляет форму. Я не согласен с тем, что это выполняется только один раз, если только я не правильно понял цикл, видя, что количество $ startpage = $ startpage 1; происходит только тогда, когда произошла публикация, и поскольку значение post встречается один раз и всегда будет меньше 11, оно будет зацикливаться вечно. Опять же, я новичок в PHP и, возможно, что-то пропустил. Рад узнать что-то новое.