Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rusti Stein

gerar array a partir de um while

Recommended Posts

Quero gerar um array, usando para isso um while. (/////////////// ///////////////)

 

Algoritmo que receba um valor digitado pelo usuário e imprima todos os números múltiplos de 3, no intervalo de 0 até o número digitado pelo usuário, um em cada linha.

(Da pra fazer sem while e sem array, até já fiz, mas quero aprender a fazer dessa forma, gerando um array a partir de um laço de repetição - que poderia ser também um for)

<body>
<form action="index.php" method="post">
Digite um número para servir de limite: <br>
<input type="number" name="numLimite"/>
<input type="submit" value="Enviar Número Limite"/>
</form>
<?php
global $numLim;
global $inicial;
if(isset ($_POST['numLimite']))
$numLim=$_POST['numLimite'];
function multiplosTres($inicial, $numLim){
while($inicial>$numLim){
return;
}
/////////////////////////////////////////////////////
while($inicial<=$numLim){
if($inicial % 3 == 0)
$arrIni = array($inicial);
$inicial++;
return $arrIni;
}
/////////////////////////////////////////////////////
}
?>
<pre>
<?php
if(isset ($_POST['numLimite']))
print_r(multiplosTres(0, $numLim));
?>
</pre>
</body>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de iniciar o "while" você cria uma array vazia:

$lista = array();
Então dentro do "while" para adicionar itens é só usar um index vazio:

$lista[] = $inicial;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei aqui e funcionou

<body>
 
<form action="array.php" method="post">
Digite um número para servir de limite: <br>
<input type="number" name="numLimite"/>
<input type="submit" value="Enviar Número Limite"/>
</form>
 
<?php
global $numLim;
global $inicial;
if(isset ($_POST['numLimite']))
$numLim=$_POST['numLimite'];
 
function multiplosTres($inicial, $numLim){
while($inicial>$numLim){
return;
}
/////////////////////////////////////////////////////
$arrIni = array();
$cont   = 0;
while($inicial<=$numLim){
	if($inicial % 3 == 0)
	{ 
		$arrIni[$cont]  = $inicial;
		$cont++;
	}
  
$inicial++;
}
return $arrIni;
/////////////////////////////////////////////////////
}
      
?>   
<pre>
        <?php
                   if(isset ($_POST['numLimite']))
                    print_r(multiplosTres(0, $numLim));
          ?>
</pre>

Vê se é isso!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel, sei que você percebeu uma gordura redundante no código, por isso retirei o primeiro while. Percebi um pequeno erro, pois ele listava o 0 (zero) como sendo múltiplo de 3. Resolvi com um unset na primeira posição do array. Agora ele lista à partir da posição 1. Pergunta: Tem como fazer a saída listar a partir de 0? Ou seja a posição 1 continuar mostrando o 3, porém exibindo a posição 0. Eliminar por completo aquela posição 0 e atribuir à nova posição 0 a posição 1; a posição 2 passar a ser a 1 e assim sucessivamente.

 

<body>
<form action="index.php" method="post">
Digite um número para servir de limite: <br>
<input type="number" name="numLimite"/>
<input type="submit" value="Enviar Número Limite"/>
</form>
<?php
global $numLim;
global $inicial;
global $arrIni;
if(isset ($_POST['numLimite']))
$numLim=$_POST['numLimite'];
function multiplosTres($inicial, $numLim){
$arrIni=array();
$cont=0;
while($inicial<=$numLim){
if($inicial % 3 == 0){
$arrIni[$cont]=$inicial;
$cont++;
}
$inicial++;
}
if($arrIni[0]==0){
unset($arrIni[0]);
}
return $arrIni;
}
?>
<pre>
<?php
if(isset ($_POST['numLimite']))
print_r(multiplosTres(0, $numLim));
?>
</pre>
</body>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução mais simples do que realocar a array inteira é fazer com que o 0 seja desconsiderado, onde você checa pela divisão você pode adicionar uma checagem adicional:

if($inicial % 3 == 0 && $inicial > 0){
E como disse no meu post anterior você pode trocar:

$arrIni[$cont]=$inicial;
Por simplesmente:

$arrIni[]=$inicial;
E descartar a variável "$cont".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show cahe7cb. Excelente esse modo com apenas um contador. E a tua sugestão de colocar mais uma condição no if foi bem simples mas muito eficiente. Agora ta do jeito que eu buscava. Parabéns. Vou dar um ponto pra ti e outro pro Daniel. Obrigado.


Galera , ficou assim:

 

<body>
<form action="index.php" method="post">
Digite um número para servir de limite: <br>
<input type="number" name="numLimite"/>
<input type="submit" value="Enviar Número Limite"/>
</form>
<?php
global $numLim;
global $inicial;
global $arrIni;
if(isset ($_POST['numLimite']))
$numLim=$_POST['numLimite'];
function multiplosTres($inicial, $numLim){
$arrIni=array();
while($inicial<=$numLim){
if($inicial % 3 == 0 && $inicial > 0){
$arrIni[]=$inicial;
}
$inicial++;
}
return $arrIni;
}
?>
<pre>
<?php
if(isset ($_POST['numLimite']))
print_r(multiplosTres(0, $numLim));
?>
</pre>
</body>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.