While PHP не превышать количество


Как я могу pro while определить, что будет превышать количество определяется в форме и пауза, прежде чем она?

FORMULARIO:

<form method="get" action="exercico04.php">
Inicio: <input type="number" name="inicio" value="1" max="100" min="1"/><br/>
Final: <input type="number" name="final" value="1" max="100" min="1"/><br/>
Incremento:
<select name="incremento">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
</select>
<br>
<input type="submit" value="Contar" class="botao"/>

PHP

$inis = isset($_GET["inicio"])?$_GET["inicio"]:0;
    $finis = isset($_GET["final"])?$_GET["final"]:0;
    $incris = isset($_GET["incremento"])?$_GET["incremento"]:0;

    if($inis < $finis){
        echo $inis . "  ";
        while($inis < $finis) {
            $inis+=$incris;
        echo $inis."  ";
    }
}else if($inis > $finis){
    echo $inis . ",";
    while($inis > $finis) {
            $inis-=$incris;
        echo $inis ."  ";
    }
}

В случае, например, если я выберу НАЧАЛОМ 7, КОНЕЦ 45 и ПРИРАЩЕНИЯ 4, он будет рассчитывать так: 7 11 15 19 23 27 31 35 39 43 47

Только в случае, хочу, чтобы он остановился, прежде чем прибыть в 45, что было бы в случае, если в 43. Как мне это сделать?

 1
Author: Lucas de Carvalho, 2017-05-11

3 answers

Есть некоторые ошибки в вашем коде, например, if($inis $finis), это условие является недействительным, другая ошибка-это состояние while, где while($inis > $finis) { если я запускаю это получение 7 и в конце 45 никогда не войдет в петлю, наконец, вы это decrementando начала и не нажимает, вот пример с correçoes:

$inis = isset($_GET["inicio"])?$_GET["inicio"]:0;
$finis = isset($_GET["final"])?$_GET["final"]:0;
$incris = isset($_GET["incremento"])?$_GET["incremento"]:0;

if($inis != 0 && $finis != 0 && $incris != 0){
   /*Verifica se o usuário não inverteu inicio e fim, se sim troca
   *Por exemplo: $inis = 45; $finis = 7;
   *Neste caso será necessário inverter as variáveis
   *
   */
   if($inis > $finis){
      $aux = $inis;//armazena o valor original de $inis na variável $aux = 45
      $inis = $finis; //$inis = 7
      $finis = $aux; //Agora recebe valor de $aux, ou seja $finis = 45
      //Depois dessa troca os valores de início e fim estarão corretos
      //$inis = 7;
      //$finis = 45;
   }

   while($inis < $finis) {
     echo $inis ."  "; // imprime o primeiro valor
     $inis+=$incris;//incrementa
     if($inis > $finis) {//se após incrementar $inis > $finis
       $inis = $finis;
       echo $inis ."  ";//imprime o $finis
     }  
   }
}

ПРИМЕР НА IDEONE

 5
Author: abfurlan, 2017-05-11 20:05:54

Использованием являетесь

if($_GET["inicio"] != 0 && $_GET["final"] != 0 && $_GET["incremento"] != 0){
   $inis=$_GET["inicio"];
   $finis=$_GET["final"];
   $incris=$_GET["incremento"];


    for ($x = $inis; $x < $finis; $x=($x+$incris)) {

        if ($x == $inis){
            echo $inis ."  ";
        }else{
            $inis+=$incris;
            echo $inis ."  ";
        }
    }
}

Структура повторения FOR используется для выполнения набора команд определенное число раз. Для этого оператора, передаются ситуации, начального, условие и действие, которое будет выполняться в каждом повторении.

В целом информируем вас, переменная, которая служит в качестве счетчика повторений, с их первоначальной стоимости, условие нужно соблюдать, чтобы каждый повтор выполняется и надбавки к счетчик.

Синтаксис оператора FOR

for(valor inicial; condição; incremento)
{
  //comandos
}

Опираясь на сказочные идея нашего друга abfurlan

"Проверяет, если пользователь не отменил начале и в конце, если да обмен"

Будет выглядеть следующим образом:

$inis = isset($_GET["inicio"])?$_GET["inicio"]:0;
$finis = isset($_GET["final"])?$_GET["final"]:0;
$incris = isset($_GET["incremento"])?$_GET["incremento"]:0;

if($inis != 0 && $finis != 0 && $incris != 0){
   if($inis > $finis){
      $aux = $inis;
      $inis = $finis;
      $finis = $aux;

   }

        for ($x = $inis; $x < $finis; $x=($x+$incris)) {

            if ($x == $inis){
                echo $inis ."  ";
            }else{
                $inis+=$incris;
                echo $inis ."  ";
            }
        }  

}
 4
Author: Leo Caracciolo, 2017-05-28 00:44:09

Более простое решение, чтобы сделать то, что хотите это использовать range(), что является родным.

Это все, что нужно:

// Trata o input:
$inicio = $_GET['inicio'] ?? 0;
$inicio = is_numeric($inicio) ? $inicio : 0;

$final = $_GET['final'] ?? 0;
$final = is_numeric($final) ? $final : 0;

$incremento = $_GET['incremento'] ?? 1;
$incremento = is_numeric($incremento) && $incremento != 0 ? $incremento : 1;

// Faz o mesmo que o `while`:
echo implode(' ', range($inicio, $final, $incremento));

Тест-это здесь.


range() будет делать то, что противоречит $inicio $fim, если установлено значение " $incremento он будет "прыгать", он не может быть 0. Он возвращает array, например, var_export(range(7, 45, 4)); приводит к:

array ( 0 => 7, 1 => 11, 2 => 15, 3 => 19, 4 => 23, 5 => 27, 6 => 31, 7 => 35, 8 => 39, 9 => 43 )

Таким образом, мы имеем, 7 43, как хотите.

implode(), делается для присоединиться значения, таким образом, собираем все с помощью (espaço) entre eles.

Dessa forma o resultado que temos de implode(' ', range(7, 45, 4)) именно:

7 11 15 19 23 27 31 35 39 43

См документации implode(), нажав здесь и документации range() здесь. Стоит напомнить, что range() также служит для букв, range('a', 'z'), приведет в алфавите. ;)

 3
Author: Inkeliz, 2017-05-11 22:07:02