Uma das formas de criar repetições em PHP é com a estrutura while
(enquanto). Veja um exemplo simples de repetição com PHP:
$c = 1;
while($c <= 10) {
echo $c . "<br/>";
$c++;
}
A mesma repetição, só que voltando a contagem:
$c = 10;
while($c >= 1) {
echo $c . "<br/>";
$c--;
}
Também podemos usar outros valores, dessa forma:
$c = 10;
while($c >= 0) {
echo $c . "<br/>";
$c -= 2; // $c = $c - 2;
}
A repetição while realiza um teste lógico no início do loop, e cada vez que o teste retornar verdadeiro, os comandos associados ao laço são executados. Se retornar falso, o laço é encerrado e o processamento volta para o fluxo principal do programa.
Podemos usar o break
e o continue
para interromper e continuar (ao encontrar algum dado que não deve ser executado) uma estrutura while, respectivamente, mas esses códigos são pouco usados. Veja um exemplo:
$volta = 0;
while(true) {
$volta++;
if($volta == 13 || $volta == 16) {
continue;
}
else if($volta == 24) {
break;
}
echo "Volta Nº $volta.<br/>";
}
Podemos usar ele em HTML também (inclusive, é um recurso muito utilizado por muitos sites). Veja um exemplo de como criar caixas de input em formulários:
$c = 1;
while($c <= 5) {
echo "Valor $c: <input type='number' name='v$c' min='0' max='100' value='0'/>"
echo "<br/>";
$c++;
}
PS: A supertag PHP deve estar entre as tags form, antes do input de submit.
Esse é o código da segunda página:
$i = 1;
while($i <= 5) {
$v = "num" . $i;
$url = "v" . $i;
$$v = isset($_GET[$url]) ? $_GET[$url] : 0;
$i++;
}
$i = 1;
while($i <= 5) {
$v = "num" . $i;
echo "Valor $i: " . $$v . "<br/>";
$i++;
}
Agora devemos criar um contador personalizável, no qual escolheremos o número inicial, o final e o incremento (e ao escolher o número inicial maior que o final, ele fará o decremento).
HTML da primeira página:
<form method="get" action="testes.php">
<fieldset>
<legend>Contador Personalizável</legend>
Início: <input type="number" name="ini" min="0" max="100" value="0"/>
Final: <input type="number" name="fin" min="0" max="100" value="0"/>
Incremento:
<select name="inc">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</fieldset>
<input type="submit" value="Calcular"/>
</form>
PHP da segunda página:
$ini = isset($_GET["ini"]) ? (int)$_GET["ini"] : 0;
$fin = isset($_GET["fin"]) ? (int)$_GET["fin"] : 0;
$inc = isset($_GET["inc"]) ? (int)$_GET["inc"] : 0;
if($ini < $fin) {
while($ini <= $fin) {
echo "$ini<br/>";
$ini += $inc;
}
}
else if($ini > $fin) {
while($ini >= $fin) {
echo "$ini<br/>";
$ini -= $inc;
}
}
else {
echo "Início ($ini) e Fim ($fin) são Iguais.";
}
Outra forma de criar repetição é a do while
, significando repita. Diferente do while, a do while é colocada no final, praticamente o contrário dela. Veja um exemplo:
$c = 1;
do {
echo " $c";
$c++;
}
while($c <= 10);
Vamos fazer o mesmo, pulando de 2 em 2:
$c = 0;
do {
echo " $c";
$c += 2;
}
while($c <= 20);
Outro exemplo, mas contando de trás pra frente:
$c = 10;
do {
echo " $c";
$c--;
}
while($c >= 1);
PS: Pode ver que, por esse fator, o comando do será executado, e só depois ele testará, independente do valor recebido. O que garante que pelo menos uma vez, o bloco de comandos é executado.
Vamos fazer um formulário onde calcularemos o fatorial de um número:
HTML da primeira página:
<form method="get" action="testes.php">
Valor: <input type="number" name="val" min="1" max="15" value="1"/>
<input type="submit" value="Fatorial"/>
</form>
PHP da segunda página:
$v = isset($_GET["val"]) ? (int)$_GET["val"] : 1;
echo "<p>Calculando o fatorial de $v.</p>";
$c = $v;
$fat = 1;
do {
$fat = $fat * $c;
$c--;
}
while($c >= 1);
echo "<p>$v! = $fat.</p>";
PS: Fatorial é nada mais que multiplicar ele por todos os números menores que ele, por exemplo, fatorial de 3 é 3 x 2 x 1.
Agora faremos um formulário no qual mostrará os números da tabuada que o usuário escolher.
HTML na primeira página:
<form method="get" action="testes.php">
Selecione o número da tabuada: <input type="number" name="tab" min="0" max="10" value="1"/>
<input type="submit" value="Calcular Tabuada"/>
</form>
PHP na segunda página:
$valor = isset($_GET["tab"]) ? (int)$_GET["tab"] : 0;
$cont = 1;
$mult = 1;
do {
$mult = $valor * $cont;
echo "$valor x $cont = $mult<br/>";
$cont++;
}
while($cont <= 10);
Podemos também usar o for para repetições, ele também tem uma herança do while. Veja um exemplo de repetição:
for($i = 1; $i <= 10; $i++) {
echo "$i<br/>";
}
Outro exemplo:
for($i = 10; $i >= 1; $i--) {
echo "$i<br/>";
}
Mais um, com incremento de 5:
for($i = 0; $i <= 100; $i += 5) {
echo "$i<br/>";
}
Da mesma forma:
for($i = 20; $i >= 0; $i -= 2) {
echo "$i<br/>";
}
A estrutura for é usada para construir estruturas de loop nos casos para que se conhecem de antemão o número de repetições que devem ser realizadas (como 10 vezes, 20 vezes, etc.).
Podemos também usar isso em formulários, veja nesse exemplo, onde colocamos uma supertag PHP dentro dos select para gerar as opções (coloque ela dentro das tags form):
for($c = 1; $c <= 10; $c++) {
echo "<option>$c</option>";
}
Na outra página, colocamos esse código pra calcular a tabuada:
$n = isset($_GET["num"]) ? (int)$_GET["num"] : 1;
for($c = 1; $c <= 10; $c++) {
$r = $n * $c;
echo "$n x $c = $r<br/>";
}
Agora faremos um script que verificará se o número é primo (os que são divisíveis apenas por ele mesmo e por 1).
Código HTML:
<form method="get" action="testes.php">
Digite um número: <input type="number" name="n"/>
<input type="submit" value="Consultar"/>
</form>
PHP da segunda página:
$valor = isset($_GET["n"]) ? (int)$_GET["n"] : 0;
echo "Analisando o número $valor.<br/>";
echo "Valores múltiplos: ";
$tot = 0;
for($i = 1; $i <= $valor; $i++) {
if($valor % $i == 0) {
$exi = $i;
$tot++;
echo "$exi ";
}
}
echo "<br/>";
echo "Total de múltiplos: $tot<br/>";
if($tot == 2) {
echo "É Primo!";
}
else {
echo "Não é Primo!";
}