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. Как мне это сделать?
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
}
}
}
Использованием являетесь
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 ." ";
}
}
}
Более простое решение, чтобы сделать то, что хотите это использовать 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')
, приведет в алфавите. ;)