Foros del Web » Programando para Internet » PHP »

Reemplazar If Por Switch

Estas en el tema de Reemplazar If Por Switch en el foro de PHP en Foros del Web. Gente no logro reemplazar esto con un switch , alguen me puede dar una mano? El codigo lo que hace es mostrar en el foro ...
  #1 (permalink)  
Antiguo 30/05/2009, 18:48
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Sonrisa Reemplazar If Por Switch

Gente no logro reemplazar esto con un switch , alguen me puede dar una mano?

El codigo lo que hace es mostrar en el foro el topic , el avatar, nombre de usuario, cantidad de post , y al rango un una imagen segun la cantidad ed posts. Aca el codigo , este codigo esta funcionando pero me parece muy sucio , me gustaria reemplazarlo con algo mas entendible.

Esta es la funcion entera.

Código PHP:
function display()
    {

        global 
$style,$website,$user;
        
$style=alternance_style($style,"bright","dark");
        echo
'<table class="answers" id="a'.$this->id.'">';
        echo
"<tr><th>";
        echo 
$this->author_answer->get_pseudo();
        if(
$this->author_answer->exist)
        {

//Quiero reemplazar estos if con algun switch  o case pero no logro
        
        
$cantpost $this->author_answer->nb_post ;
        
        
        if(
$user->admin_rights==9)
        
$rango "<center><img src='images/rank/administrador.gif' title='Administrador'></center>" ;
        if(
$user->admin_rights==8)
        
$rango "<center><img src='images/rank/moderador.gif' title='Moderador'></center>" ;
        

    if (
$cantpost >= && $cantpost <= 10
                
$rango "<center> Nuevo <br/> <img src='images/rank/nuevo.gif' title='Nuevo'></center>" ;
                
    if (
$cantpost >= 11 && $cantpost <= 50
                
$rango "<center> Principiante <br/> <img src='images/rank/principiante.gif' title='Pincipiante'></center>" ;
                
    if (
$cantpost >= 51 && $cantpost <= 100
    
$rango"<center> Avanzado <br/> <img src='images/rank/avanzado.gif' title='Avanzado'></center>";
    
    if (
$cantpost >= 101 && $cantpost <= 150
    
$rango "<center>Experto <br/> <img src='images/rank/experto.gif' title='Experto'></center>";
    
    if (
$cantpost >= 151 and $user->admin_rights!=and $user->admin_rights!=8
    
$rango "<center>Super Usuario <br/> <img src='images/rank/super.gif' title='Super Usuario'></center>";
    
    
    
//Aqui terminan los if

    
            
echo "<p>".$this->author_answer->display_avatar()."&nbsp;</p>"."<p>";
            
//echo $this->author_answer->status. "<br/>" .$rango."";
            
echo "" .$rango."";
            echo 
""$this->author_answer->nb_post." "MSG_posts"<br/>";
            echo
"</p>";
        } 
  #2 (permalink)  
Antiguo 30/05/2009, 18:52
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Reemplazar If Por Switch

Código php:
Ver original
  1. switch(true) {
  2.  
  3. case ($cantpost >= 0 && $cantpost <= 10):
  4. //asdoasda
  5. break;
  6.  
  7. case ($cantpost >= 11 && $cantpost <= 50):
  8. //asd
  9. break;
  10.  
  11. }
  #3 (permalink)  
Antiguo 30/05/2009, 19:05
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Reemplazar If Por Switch

gracias por la respuesta mas o enos la agarre.

El problema ahoira es que no me toma esto.

Código PHP:
    if($user->admin_rights==9)
        
$rango "<center><img src='images/rank/administrador.gif' title='Administrador'></center>" ;
        if(
$user->admin_rights==8)
        
$rango "<center><img src='images/rank/moderador.gif' title='Moderador'></center>" ;
            
        switch(
true) { 
        case (
$cantpost >= && $cantpost <= 10):
        
$rango "<center> Nuevo <br/> <img src='images/rank/nuevo.gif' title='Nuevo'></center>" ;
        break; 
        case (
$cantpost >= 11 && $cantpost <= 50):
        
$rango "<center> Principiante <br/> <img src='images/rank/principiante.gif' title='Pincipiante'></center>" ;
        break; 
        case (
$cantpost >= 51 && $cantpost <= 100):
        
$rango"<center> Avanzado <br/> <img src='images/rank/avanzado.gif' title='Avanzado'></center>";
        break; 
        case (
$cantpost >= 101 && $cantpost <= 150):
        
$rango "<center>Experto <br/> <img src='images/rank/experto.gif' title='Experto'></center>";
        break; 
/*No me toma lo de aqui abajo si el usuario tiene mas de 151 post y no es ni admin ni moderador , osea no me toma esto  creo $user->admin_rights ,con los if como estaba antes si la hace , alguan idea de por que */
        
case ($cantpost >= 151 and $user->admin_rights!=and $user->admin_rights!=8) :
        
$rango "<center>Super Usuario <br/> <img src='images/rank/super.gif' title='Super Usuario'></center>";
        break;
        } 
  #4 (permalink)  
Antiguo 30/05/2009, 19:14
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Reemplazar If Por Switch

¿Haz probado con las otras condiciones?

Recuerda, que solo se mostrara ese case si todas las condiciones devuelven true.
Osea, admin_rights debe ser diferente de 9 y de 8. Y la cantidad de posts tiene que ser mayor o igual que 151.
Imprime las variables antes de entrar al switch. ¿Que devuelve?
  #5 (permalink)  
Antiguo 30/05/2009, 19:19
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Reemplazar If Por Switch

El usuario tiene mas de 151 post y es administrador y me esta mostrando la imagen

Código HTML:
Super Usuario
images/rank/super.gif
Cuando deberia mostrarme
Código HTML:
images/rank/administrador.gif
No?

la funcion user()

La tomo aqui

Código PHP:
global $style,$website,$user
  #6 (permalink)  
Antiguo 30/05/2009, 19:21
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Reemplazar If Por Switch

Mete las 2 primeras condiciones en el switch.
  #7 (permalink)  
Antiguo 30/05/2009, 19:28
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Reemplazar If Por Switch

Código PHP:
function display()
    {

        global 
$style,$website,$user;
        
$style=alternance_style($style,"bright","dark");
        echo
'<table class="answers" id="a'.$this->id.'">';
        echo
"<tr><th>";
        echo 
$this->author_answer->get_pseudo();
        if(
$this->author_answer->exist)
        {
        
        
$cantpost $this->author_answer->nb_post ;
        
        
        
switch(
true) { 
        case (
$user->admin_rights==9):
        
$rango "<center><img src='images/rank/administrador.gif' title='Administrador'></center>" ;
        break;
        case (
$user->admin_rights==8):
        
$rango "<center><img src='images/rank/moderador.gif' title='Moderador'></center>" ;
        break;
        case (
$cantpost >= && $cantpost <= 10):
        
$rango "<center> Nuevo <br/> <img src='images/rank/nuevo.gif' title='Nuevo'></center>" ;
        break; 
        case (
$cantpost >= 11 && $cantpost <= 50):
        
$rango "<center> Principiante <br/> <img src='images/rank/principiante.gif' title='Pincipiante'></center>" ;
        break; 
        case (
$cantpost >= 51 && $cantpost <= 100):
        
$rango"<center> Avanzado <br/> <img src='images/rank/avanzado.gif' title='Avanzado'></center>";
        break; 
        case (
$cantpost >= 101 && $cantpost <= 150):
        
$rango "<center>Experto <br/> <img src='images/rank/experto.gif' title='Experto'></center>";
        break; 
        case (
$cantpost >= 151 and $user->admin_rights!=and $user->admin_rights!=8) :
        
$rango "<center>Super Usuario <br/> <img src='images/rank/super.gif' title='Super Usuario'></center>";
        break;
        }
    
            
        

    
            echo 
"<p>".$this->author_answer->display_avatar()."&nbsp;</p>"."<p>";
            
//echo $this->author_answer->status. "<br/>" .$rango."";
            
echo "" .$rango."";
            echo 
""$this->author_answer->nb_post." "MSG_posts"<br/>";
            echo
"</p>";
        } 
De esta manera me muestra a todos los usuarios del post como administradores

Última edición por EmaD; 30/05/2009 a las 19:35
  #8 (permalink)  
Antiguo 30/05/2009, 19:34
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Reemplazar If Por Switch

Código php:
Ver original
  1. if($user->admin_rights==8):
  2.         $rango = "<center><img src='images/rank/moderador.gif' title='Moderador'></center>" ;
  3.         break;

Se te olvido reemplazar el if por case.
  #9 (permalink)  
Antiguo 30/05/2009, 19:38
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Reemplazar If Por Switch

si perdon lo copie mal aca , pero sigue sin funcionar como esta ahora fijate lo corregi.

No entiendo porqeu con los ifs funciona perfecto como en el primer codigo y con el switch no.

probe declarando una variable mas antes del switch

$cantpost = $this->author_answer->nb_post ;
$adminrights = $user->admin_rights;

Y hacer esto

case ($adminrights==9):

Y tampoco
  #10 (permalink)  
Antiguo 30/05/2009, 19:44
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Reemplazar If Por Switch

Imprime: $user->admin_rights antes de entrar al switch.

En teoria, deberia funciona. Hasta hice una pequeña prueba en mi servidor local, y no tuve problemas.
  #11 (permalink)  
Antiguo 30/05/2009, 19:50
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Reemplazar If Por Switch

Chekea , ahi imprimo los admin rights

http://www.radiometal.com.ar/FORO-vi...cumpleanos.htm

Los aministradores son ema y chizzo . y muestra a todos como 9 no se porque , seguramente esta mostrando lso derechso miois alomejor a vos te muestre otro si entars como invitadote mostrara todos con 0

Es raro lo qeu hace , y mas raro es que funcione con los if y no con el switch la logica esta bien
  #12 (permalink)  
Antiguo 30/05/2009, 19:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Reemplazar If Por Switch

Cita:
derechos0
Eso muestra en todos los casos.

Mira, he hecho un ejemplo, y funciona perfectamente:
Código php:
Ver original
  1. <?php
  2.  
  3. $foo = 9;
  4.  
  5. switch(true) {
  6.     case ($foo > 0 AND $foo < 7):
  7.         echo "Mayor que 0, menor que 7<br />";
  8.     break;
  9.    
  10.     case($foo == 8):
  11.         echo "Igual a 8<br />";
  12.     break;
  13.    
  14.     case($foo > 8):
  15.         echo "Mayor que 8<br />";
  16.     break;
  17.    
  18.     default:
  19.         echo "Ninguna<br />";
  20.     break;
  21. }
  22.  
  23. if($foo > 0 AND $foo < 7) {
  24.     echo "Mayor que 0, menor que 7<br />";
  25. } elseif($foo == 8) {
  26.     echo "Igual a 8<br />";
  27. } elseif($foo > 8) {
  28.     echo "Mayor que 8<br />";
  29. } else {
  30.     echo "Ninguna<br />";
  31. }
  32.  
  33. ?>
En ambos casos imprime: Mayor que 8 correctamente.

Avalua las condicionales:
var_dump(($user->admin_rights==9), ($user->admin_rights==8), /** etc */);

EDIT: Ahora que veo bien, lo esta imprimiendo correctamente:
Imprime: Principiante
Y mas abajo, la imagen correspondiente a ese rango.

Por lo tanto, el switch esta funcionando bien. Algo mas, arriba de ese codigo, esta fallando.

Última edición por Ronruby; 30/05/2009 a las 20:02
  #13 (permalink)  
Antiguo 30/05/2009, 20:15
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Reemplazar If Por Switch

Si algo esta fallando , pero , por qeu motivo con los if muestra todo como corresponde?

alguna idea , funciona distinto ? no entiendo por qeu esa diferencia , con el switch toma a

$user->admin_rights con los valores del qeu esta viendo el post

y con los if toma
$user->admin_rights
como los que escribieron el post

es decir uno toma a el user como el que esta logueado y el orto como cada uno que escribi el post. Mir lo dejo con los if para que veas como funciona.

Salu2 segtuire investigando todo el codigo
  #14 (permalink)  
Antiguo 30/05/2009, 21:00
Avatar de EmaD  
Fecha de Ingreso: marzo-2008
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Reemplazar If Por Switch

Muchas gracias por la ayuda , me sirvio muchisimo.

Muestro como lo solucione. Con el if me hacia el mismo problema que con sl switch de esta manera funciona correctamente , aparte de que asigne la variable derechos con los derechos de cada uno del post y no del usuario qeu esta logueado viendo el post.

Código PHP:
        $cantpost $this->author_answer->nb_post ;
        
$derechos $this->author_answer->admin_rights;
        
            
            
switch(
true) { 
        case (
$derechos==9) :
        
$rango "<center>Administrador <br/> <img src='images/rank/administrador.gif' title='Super Usuario'></center>";
        break;
        case (
$derechos==8) :
        
$rango "<center>Moderador <br/> <img src='images/rank/moderador.gif' title='Super Usuario'></center>";
        break;
        case (
$cantpost >= && $cantpost <= 10):
        
$rango "<center> Nuevo <br/> <img src='images/rank/nuevo.gif' title='Nuevo'></center>" ;
        break; 
        case (
$cantpost >= 11 && $cantpost <= 50):
        
$rango "<center> Principiante <br/> <img src='images/rank/principiante.gif' title='Pincipiante'></center>" ;
        break; 
        case (
$cantpost >= 51 && $cantpost <= 100):
        
$rango"<center> Avanzado <br/> <img src='images/rank/avanzado.gif' title='Avanzado'></center>";
        break; 
        case (
$cantpost >= 101 && $cantpost <= 150):
        
$rango "<center>Experto <br/> <img src='images/rank/experto.gif' title='Experto'></center>";
        break; 
        case (
$cantpost >= 151) :
        
$rango "<center>Super Usuario <br/> <img src='images/rank/super.gif' title='Super Usuario'></center>";
        break;
        }
    
    
    
            
    
        
    
    
            echo 
"<p>".$this->author_answer->display_avatar()."&nbsp;</p>"."<p>";
            
//echo $this->author_answer->status. "<br/>" .$rango."";
            
echo "" .$rango."";
            echo 
""$this->author_answer->nb_post." "MSG_posts"<br/>";
            echo
"</p>";
        } 
Gracias por dedicarle tiempo a mi problema Ronruby.

Salu2 Emanuel
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 21:34.