Foros del Web » Programando para Internet » PHP »

sobre bucles

Estas en el tema de sobre bucles en el foro de PHP en Foros del Web. ¡Hola Chicos! La verdad es que me lia un poco esto de los bucles. Estoy haciendo una funcion bastante sencilla por lo cual (y es ...
  #1 (permalink)  
Antiguo 18/12/2008, 08:43
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
sobre bucles

¡Hola Chicos!

La verdad es que me lia un poco esto de los bucles. Estoy haciendo una funcion bastante sencilla por lo cual (y es un poco lioso) quiero que se repita el resultado 15 veces.

Y se que la mejor manera es esta:
Código PHP:
<?php
$cuenta 
0;

echo 
"Voy a entrar al bucle while <br>";

while ( 
$cuenta <= 10) {
echo 
"Cuenta vale $cuenta <br>";
$cuenta++;
}

echo 
"He salido del bucle while";
?>
PD: este ejemplo no lo he elegido yo, es copiado de un tutorial.

Veo que se pasa un valor en $cuenta, pero por narices hay que pasar siempre valores para que te repita un numero determinado de veces cualquier cosa?

solo quiero que se repita 15 veces una variable.
haciendolo así (obviamente) no funciona:
Código PHP:
<?php
while (10) {
echo 
"Cuenta vale $cuenta <br>";
$cuenta++;
}

echo 
"He salido del bucle while";
?>
En este caso se repite mas de 10 veces.

hay algun otro modo para no tener que pasar una variable al bucle y que se repita simplemente lo que necesito?

Se que puedo cojer ejemplo primero y dejar en 0 el primero, pero quiero tenerlo algo mas limpio y ordenado.

Gracias por todo.
  #2 (permalink)  
Antiguo 18/12/2008, 09:04
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: sobre bucles

Cita:
hay algun otro modo para no tener que pasar una variable al bucle y que se repita simplemente lo que necesito?
El bucle while es:

Código PHP:
<?php
while(true//mientras que la expresion dentro del parentesis sea VERDAD
{
  
//ejecuto lo que esta dentro de las llaves
}
?>
Por eso tienes que hacerlo de la manera que te dice el tutorial, para que en cada vuelta de el bucle compruebe si la expresion sigue siendo TRUE.
Pero como pones:
while(10), esto crea un bucle infinito. 10 siempre sera TRUE.

Cita:
Se que puedo cojer ejemplo primero y dejar en 0 el primero, pero quiero tenerlo algo mas limpio y ordenado.
Usa un bucle for:

Código PHP:
<?php
for($i 0$i 15$i++)
{
  
"La variable vale: $i <br />";
}
?>
  #3 (permalink)  
Antiguo 18/12/2008, 09:14
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
Respuesta: sobre bucles

Cita:
Iniciado por Ronruby Ver Mensaje
El bucle while es:

Código PHP:
<?php
while(true//mientras que la expresion dentro del parentesis sea VERDAD
{
  
//ejecuto lo que esta dentro de las llaves
}
?>
Por eso tienes que hacerlo de la manera que te dice el tutorial, para que en cada vuelta de el bucle compruebe si la expresion sigue siendo TRUE.
Pero como pones:
while(10), esto crea un bucle infinito. 10 siempre sera TRUE.



Usa un bucle for:

Código PHP:
<?php
for($i 0$i 15$i++)
{
  
"La variable vale: $i <br />";
}
?>
pero no hay una manera donde no tenga que pasarle ninguna cadena a la condicion del bucle?
  #4 (permalink)  
Antiguo 18/12/2008, 09:22
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: sobre bucles

No, no hay manera. Siempre hay que pasarle una condicion, eso para evitar los bucles infinitos.
  #5 (permalink)  
Antiguo 18/12/2008, 09:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: sobre bucles

Puedes hacer algo así aunque no veo para que lo harias:
Código php:
Ver original
  1. $cuenta = 0;
  2. while(true) {
  3.      // cosas
  4.      $cuenta++;
  5.      if( $cuenta == 10 ) {
  6.           break; // sales del ciclo
  7.      }
  8. }

Digo es más codigo pero por algo el while debe de evaular una condición.

Saludos.
  #6 (permalink)  
Antiguo 18/12/2008, 10:37
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
Respuesta: sobre bucles

bueno cuando llege a casa, los veo y ya os cuento
gracias chicos!
  #7 (permalink)  
Antiguo 25/12/2008, 12:04
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
Respuesta: sobre bucles

Hola chicos. Agradezco vuestras respuestas, pero hay algo de mi que creo que en cuanto a los bucles no me ha quedado claro, asi que espero a vuestras opiniones.

Estoy haciendo un script que lo que hace es, de una frase, la limpia de puntos y comas y de letras en mayusculas para sacar el resultado en minusculas y así separarlas.

Código PHP:
<?php
// declaramos el contenido de la cadena.
$cadena "El vEloZ mUrciÉlAgo Hindú ComÍA feliZ CardillO y KiWi. La cigüeña tocaba el saxofón detrás del palenque de paja.";

function 
ExtraerCadena ($cadena){
    
// hacemos el contenido de la cadena en minusculas.
    
$cadena strtolower($cadena);
    
// declaramos un array con los valores que deseamos eliminar y los remplazamos.
    
$valores_eliminar = array(","";"".""  ");
    
$cadena str_replace($valores_eliminar''$cadena);
    
// separamos en palabras la cadena
    
$palabras split(" "$cadena);
    
// desordenamos las palabras
    
$claves_aleatorias array_rand($palabras);
    echo 
$palabras[$claves_aleatorias];   
}

ExtraerCadena ($cadena);   // vuelca palabras por separado de la cadena
?>
la cosa es que ahora quiero hacer un bucle de 15 veces para el resultado. La cosa es sacar 15 resultados diferentes para esa función.

No se si lo habeis entendido...

Es por eso que ami lo del bucle for o while no me cuadra. no hay algo mas sencillo?

y por ultimo ¿que me recomendais para depurar el codigo?
  #8 (permalink)  
Antiguo 25/12/2008, 13:26
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Respuesta: sobre bucles

Código PHP:

// declaramos el contenido de la cadena.
$cadena "El vEloZ mUrciÉlAgo Hindú ComÍA feliZ CardillO y KiWi. La cigüeña tocaba el saxofón detrás del palenque de paja.";

function 
ExtraerCadena ($cadena){
    
// hacemos el contenido de la cadena en minusculas.
    
$cadena strtolower($cadena);
    
// declaramos un array con los valores que deseamos eliminar y los remplazamos.
    
$valores_eliminar = array(","";"".""  ");
    
$cadena str_replace($valores_eliminar''$cadena);
    
// separamos en palabras la cadena
    
$palabras split(" "$cadena);
    
// desordenamos las palabras
    
$claves_aleatorias array_rand($palabras);
    echo 
$palabras[$claves_aleatorias];   
}


for(
$i=0;$i<15;$i++){
ExtraerCadena ($cadena);   // vuelca palabras por separado de la cadena
echo "<br>";

Lo que puede ocurrir es que haya resultados repetidos.

Con este código de abajo obtenes 15 resultados distintos:


Código PHP:
<?php

// declaramos el contenido de la cadena.
$cadena "El vEloZ mUrciÉlAgo Hindú ComÍA feliZ CardillO y KiWi. La cigüeña tocaba el saxofón detrás del palenque de paja.";

function 
ExtraerCadena ($cadena){
    
// hacemos el contenido de la cadena en minusculas.
    
$cadena strtolower($cadena);
    
// declaramos un array con los valores que deseamos eliminar y los remplazamos.
    
$valores_eliminar = array(","";"".""  ");
    
$cadena str_replace($valores_eliminar''$cadena);
    
// separamos en palabras la cadena
    
$palabras split(" "$cadena);
    
// desordenamos las palabras
    
$claves_aleatorias array_rand($palabras);
    
    return 
$palabras[$claves_aleatorias];   
}


$resultados = array();

$i=0;

while(
$i 15){

$valor ExtraerCadena ($cadena);

if(!
in_array($valor$resultados)){

$resultados[] = $valor;
echo 
"<br>" $valor;
$i++;

}


}


?>
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/

Última edición por hgp147; 25/12/2008 a las 13:44
  #9 (permalink)  
Antiguo 25/12/2008, 13:59
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
Respuesta: sobre bucles

ey! no lo habia pensado lo de los resultados repetidos, la verdad!
muchas gracias!
  #10 (permalink)  
Antiguo 27/12/2008, 13:37
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
Respuesta: sobre bucles

Hgp, sobre tu ultimo ejemplo, no hay una manera mejor, en cuanto a que si te repita palabras, pero que no sean consecutivas??

por ejemplo para cuando te salga un resultado así:

y saxofón cigüeña feliz comía comía palenque cardillo de de cardillo la veloz cigüeña la

cuando salga de nuevo la palabra, y ya se ha puesto justamente antes, para que no salgan seguidas, pero si salga en otra parte de la palabra?

estoy dandole vueltas pero no se me ocurre alguna opcion ¿alguna ayuda?

gracias
  #11 (permalink)  
Antiguo 27/12/2008, 13:57
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Respuesta: sobre bucles

Proba esto:

Código PHP:

$cadena 
"El vEloZ mUrciÉlAgo Hindú ComÍA feliZ CardillO y KiWi. La cigüeña tocaba el saxofón detrás del palenque de paja.";

function 
ExtraerCadena ($cadena){
    
// hacemos el contenido de la cadena en minusculas.
    
$cadena strtolower($cadena);
    
// declaramos un array con los valores que deseamos eliminar y los remplazamos.
    
$valores_eliminar = array(","";"".""  ");
    
$cadena str_replace($valores_eliminar''$cadena);
    
// separamos en palabras la cadena
    
$palabras split(" "$cadena);
    
// desordenamos las palabras
    
$claves_aleatorias array_rand($palabras);
    
    return 
$palabras[$claves_aleatorias];   
}



$valor_ant "";

for(
$i=0;$i<14;$i++){

$valor ExtraerCadena ($cadena);

while(
$valor_ant == $valor){

$valor ExtraerCadena ($cadena);

}

echo 
"<br>" $valor;

$valor_ant $valor;


__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #12 (permalink)  
Antiguo 27/12/2008, 14:19
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
Respuesta: sobre bucles

ey! esto si!
en vez de un while no puede ser un if? (pregunto incultamente)
  #13 (permalink)  
Antiguo 27/12/2008, 14:23
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Respuesta: sobre bucles

Algo así dices?

Código PHP:
$valor_ant "";

for(
$i=0;$i<14;$i++){

$valor ExtraerCadena ($cadena);

if(
$valor_ant == $valor){

$valor ExtraerCadena ($cadena);

}

echo 
"<br>" $valor;

$valor_ant $valor;


No puede ser un IF porque si nuevamente la función dentro del IF devuelve la misma palabra, no se va a volver a pedir otra distinta. En cambio con el while se ejecuta hasta que la función devuelva una palabra distinta de la anterior. (Se ejecuta 0 a n veces)

Para acortar un poco el código se puede usar un do/while

Código PHP:
$valor_ant "";

for(
$i=0;$i<14;$i++){

do{

$valor ExtraerCadena ($cadena);

}while(
$valor_ant == $valor);

echo 
"<br>" $valor;

$valor_ant $valor;


__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #14 (permalink)  
Antiguo 27/12/2008, 21:16
 
Fecha de Ingreso: junio-2002
Mensajes: 321
Antigüedad: 21 años, 9 meses
Puntos: 3
Respuesta: sobre bucles

ey. ahora si voy entendiendo mas las cosas
se agradece hgp!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:32.