Foros del Web » Programando para Internet » PHP »

Sacar un return dentro de un bucle

Estas en el tema de Sacar un return dentro de un bucle en el foro de PHP en Foros del Web. Hola amigos del metal Aqui estoy con un grave problema en mi codigo. He creado una función pero no soy capaz de ponerla en marcha ...
  #1 (permalink)  
Antiguo 14/11/2010, 15:05
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Sacar un return dentro de un bucle

Hola amigos del metal

Aqui estoy con un grave problema en mi codigo. He creado una función pero no soy capaz de ponerla en marcha ya que el return que hay dentro del bucle FOR no me funciona bien. Si utilizo ECHO, si funciona, pero con RETURN la cosa se pone fea.

¿Algún alma cándida podría ayudarme? Si es reescribiendo el código que pego, mucho mejor.

Como siempre muchas gracias por vuestra ayuda. Dios os lo pague con una linda mujer.

Código:
function nombre_receta2($receta,$palabras){

if ($palabras>'0')
   {
$dividir=explode(" ",$receta);
$numero_palabras=count($dividir);
for ($i=0; $i<$palabras; $i++)
    {
if ($i<$palabras-1){return " ";}
return $dividir[$i];

    }
}else{
return $receta;
   }
}
  #2 (permalink)  
Antiguo 14/11/2010, 15:50
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Sacar un return dentro de un bucle

Hola,

El uso del return, finaliza la función.

Si se cumple if ($i<$palabras-1){return " "; te devolverá una cadena vacia y si no se cumple te devolverá el primer elemento de $dividir. Y aquí se acaba la función.

Por que dices que la cosa se pone fea??

Prueba:
Código PHP:
<?php
function nombre_receta2($receta,$palabras){

if (
$palabras>0){
    
$dividir=explode(" ",$receta);
    
$numero_palabras=count($dividir);
    for (
$i=0$i<$palabras$i++){
        if (
$i<$palabras-1){
        return 
"vacio";
        }
    return 
$dividir[$i];
    }
}
else{
return 
$receta;
}
}

$salida=nombre_receta2("esto es una receta"4);
echo 
$salida;
?>
Saludos
__________________
Tu álbum de cromos online!!
  #3 (permalink)  
Antiguo 14/11/2010, 17:45
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Sacar un return dentro de un bucle

Es curioso porque no entiendo la función, qué es lo que quieres, extraer el número de palabras que entregas como segundo argumento (n), de la cadena que entregas como primero?

Código PHP:
<?php
function nombre_receta2($receta,$palabras){

if (
$palabras>0){
    
$dividir=explode(" ",$receta);
    
$numero_palabras=count($dividir); // <<-- no utilizas esta variable?
    
for ($i=0$i<$palabras$i++){
        if (
$i<$palabras-1){ // <<-- y si niegas esta condición? (>) claro que si es un contador mejor compararla con (==) pero usando un while
        
return "vacio"// <<-- eing?
        
}
    return 
$dividir[$i]; //para qué bucle si solo devuelves la el primer elemento?
    
}
}
else{
return 
$receta;
}
}

$salida=nombre_receta2("esto es una receta"4);
echo 
$salida;
?>
tal vez esto es lo que quieres:

Código PHP:
function nombre_receta2 ($receta$palabras)
{
    
$receta explode (" "$receta);
    
$i 0// Indice
    
$buffer ""// para guardar el resultado
    
while ($i <= $palabras) { // recorrer hasta que llegues al limite de palabras (no uso == por precaución [PARANOICMODE = 0N])
        
$buffer .= $receta[$i++] . " "// llenas el bufer
    
}
    return 
trim ($buffer); // el último caracter es un espacio, trim lo limpia, también otros posibles
// [PARANOICMODE = ...... OFF]

espero que te funcione
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #4 (permalink)  
Antiguo 14/11/2010, 18:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sacar un return dentro de un bucle

Hola amigos

He probado las dos variantes de script que enviais pero no ha habido suerte.

Mi intencion con esta funcion es la siguiente: hacer que mediante dicha funcion y pasandole el parametro de "palabras", la funcion haga el corte exacto en la palabra que le digo.

Un ejemplo:

recortar("hola esta es mi magnifica frase",3) ----> resultado: "hola esta es"

Lo de trim me encantó porque no lo conocía, pero el bucle while no funcionó al final.

alguna propuesta? quiza mi funcion es demasiado compleja y se puede hacer de una forma mas simple, estoy seguro!!!

IMPORTANTE: el resultado de la funcion debo darla como valor con RETURN, ya que con ECHO no me vale para insertarla en una query de mysql (me da error)
  #5 (permalink)  
Antiguo 14/11/2010, 21:39
Avatar de DeveloperFresh  
Fecha de Ingreso: mayo-2009
Ubicación: Ancon City
Mensajes: 35
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Sacar un return dentro de un bucle

Cita:
Iniciado por victorianotruji Ver Mensaje

Como siempre muchas gracias por vuestra ayuda. Dios os lo pague con una linda mujer.
jaj, me parecio gracioso
xD
  #6 (permalink)  
Antiguo 15/11/2010, 00:56
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Sacar un return dentro de un bucle

Cita:
Iniciado por jaao_death Ver Mensaje
Es curioso porque no entiendo la función, qué es lo que quieres, extraer el número de palabras que entregas como segundo argumento (n), de la cadena que entregas como primero?

Código PHP:
<?php
function nombre_receta2($receta,$palabras){

if (
$palabras>0){
    
$dividir=explode(" ",$receta);
    
$numero_palabras=count($dividir); // <<-- no utilizas esta variable?
    
for ($i=0$i<$palabras$i++){
        if (
$i<$palabras-1){ // <<-- y si niegas esta condición? (>) claro que si es un contador mejor compararla con (==) pero usando un while
        
return "vacio"// <<-- eing?
        
}
    return 
$dividir[$i]; //para qué bucle si solo devuelves la el primer elemento?
    
}
}
else{
return 
$receta;
}
}

$salida=nombre_receta2("esto es una receta"4);
echo 
$salida;
?>
tal vez esto es lo que quieres:

Código PHP:
function nombre_receta2 ($receta$palabras)
{
    
$receta explode (" "$receta);
    
$i 0// Indice
    
$buffer ""// para guardar el resultado
    
while ($i <= $palabras and !( $i> = count ($receta)) ) { // recorrer hasta que llegues al limite de palabras (no uso == por precaución [PARANOICMODE = 0N])
        
$buffer .= $receta[$i++] . " "// llenas el bufer
    
}
    return 
trim ($buffer); // el último caracter es un espacio, trim lo limpia, también otros posibles
// [PARANOICMODE = ...... OFF]

espero que te funcione
Código PHP:
function nombre_receta2 ($receta$palabras)
{
    
$receta explode (" "$receta);
    
$i 0// Indice
    
$buffer ""// para guardar el resultado

    
while ($i <= ($palabras-1) and !($i >= count ($receta)) ) { // recorrer hasta que llegues al limite de palabras (no uso == por precaución [PARANOICMODE = 0N])
        
$buffer .= $receta[$i++] . " "// llenas el bufer
    
}   

    return 
trim ($buffer); // el último caracter es un espacio, trim lo limpia, también otros posibles
    // [PARANOICMODE = ...... OFF]
}


$rece "caldo de gallina criolla con patatas"//<<-- se me ocurrió, no sé si exista
$palab 4;

echo 
nombre_receta2 ($rece$palab); 
devuelve caldo de gallina criolla
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #7 (permalink)  
Antiguo 15/11/2010, 04:27
Avatar de DvD AdN  
Fecha de Ingreso: mayo-2005
Ubicación: Frente al monitor
Mensajes: 610
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Sacar un return dentro de un bucle

por qué no usar substr ?
__________________
Keep f***ing learning
Ask for f***ing help.
Use f***ing spell check.
Think about all the f***ing possibilities.
  #8 (permalink)  
Antiguo 15/11/2010, 07:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 17
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Sacar un return dentro de un bucle

Hola. Espero entender tu duda, te escribo lo que creo que te servirá:


Código PHP:
$supuesto "hola esta es mi magnifica frase";
$palabras 3;

echo 
extraerNombreReceta($supuesto$palabras);


function 
extraerNombreReceta($receta$palabras)
{
    
$receta explode(" ",$receta);
    
    for(
$i 0$i$palabras$i++)
    {
        
$nombreReceta .= $receta[$i] . " ";
    }

    return 
$nombreReceta;



Un saludo.

Espero que te sea útil.
  #9 (permalink)  
Antiguo 15/11/2010, 07:46
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Sacar un return dentro de un bucle

Chicos, muchisimas gracias por vuestra ayuda. Finalmente he mezclado varios de vuestros consejos y he dejado la función en esto:

Código:
function nombre_receta2($receta, $palabras) 
{ 
    $receta = explode(" ",$receta); 
     
    for($i = 0; $i< $palabras; $i++) 
    { 
        $nombreReceta .= $receta[$i] . " "; 
    } 

    return trim ($nombreReceta); 

}
El código es muy limpio, y la función trim me soluciona la vida para no tener que estar haciendo bucles raros dentro del FOR.

Muchas gracias a todos por la ayuda. Exitos mil para forosdelweb y lindas novias para todos ustedes
  #10 (permalink)  
Antiguo 15/11/2010, 10:24
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Sacar un return dentro de un bucle

Cita:
Iniciado por victorianotruji Ver Mensaje
Chicos, muchisimas gracias por vuestra ayuda. Finalmente he mezclado varios de vuestros consejos y he dejado la función en esto:

Código:
function nombre_receta2($receta, $palabras) 
{ 
    $receta = explode(" ",$receta); 
     
    for($i = 0; $i< $palabras; $i++) 
    { 
        $nombreReceta .= $receta[$i] . " "; 
    } 

    return trim ($nombreReceta); 

}
El código es muy limpio, y la función trim me soluciona la vida para no tener que estar haciendo bucles raros dentro del FOR.

Muchas gracias a todos por la ayuda. Exitos mil para forosdelweb y lindas novias para todos ustedes
tengo que decir que es igual que el código que yo hice, con el while, lo único es que en la última versión que subí (compruébalo tú mismo) tomo en cuenta la consideración de que la cadena tenga menos palabras de las que se piden y con eso añado otro condicional al while (lo puedes transpolar al for si quieres) y es, que el índice sea menor que el número de palabras que tiene el nombre de la recete. Esto en realidad aunque no presenta problemas visibles, el echo de que el bucle se ejecute más veces de las necesarias implica un uso de CPU innecesario, piensa siempre en la optimización (en realidad se recomienda la optimización cuando el proyecto está finalizado, pero no puedo evitar hacerlo antes, jeje)
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter

Etiquetas: bucle, return
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:23.