Foros del Web » Programando para Internet » PHP »

Foreach dentro de un switch

Estas en el tema de Foreach dentro de un switch en el foro de PHP en Foros del Web. Buenos días, a ver si me podéis ayudar de como puedo hacer esto. El caso es que necesito hacer un forech que me añada urls ...
  #1 (permalink)  
Antiguo 02/06/2014, 05:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 146
Antigüedad: 13 años, 4 meses
Puntos: 3
Foreach dentro de un switch

Buenos días, a ver si me podéis ayudar de como puedo hacer esto.

El caso es que necesito hacer un forech que me añada urls a los case de un switch y no se como estructurarlo de manera correcta.

Os copio mi codigo:

Este seria el forech
Código PHP:
foreach($lang_urls as $k=>$v)
        {


y este el switch
Código PHP:
switch ($webLang) {
            case 
"de":
                
Header('Location: http://www.tuweb.com/index-de.php');
                break;
            case 
"en":
                
Header('Location: http://www.tuweb.com/index-en.php');
                break;
            case 
"es":
                
Header('Location: http://www.tuweb.com/index.php');
                break;
            case 
"fr":
                
Header('Location: http://www.tuweb.com/index-fr.php');
                break;
            case 
"it":
                
Header('Location: http://www.tuweb.com/index-it.php');
                break;
            
            default: 
                
Header('Location: http://www.tuweb.com/');
        } 
Para que lo podáis entender se trata de que las urls que van en los headers las saco con el foreach. También saco el case con el forech.

Como puedo meter uno dentro del otro?



He probado con esto:

Código PHP:
switch ($webLang) {
            
            foreach(
$lang_urls as $k=>$v){
             case 
$v['language'] :
             
Header('Location: http://www.quality-courses.com/'.$v['full_uri'].'');
            }
            
            
            
            default: 
                
Header('Location: http://www.quality-courses.com/');
        } 


Gracias compañeros!

Última edición por dierrytacato; 02/06/2014 a las 05:55
  #2 (permalink)  
Antiguo 02/06/2014, 06:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Foreach dentro de un switch

Solo puedes redireccionar a una pagina ... te parece tendria sentido se abrieran 50 ventanas con la pagina en 50 idiomas distintos ?

Lo que quieres hacer es esto:

Código PHP:
Ver original
  1. if (!empty($webLang))
  2.     Header("Location: http://www.tuweb.com/index-$webLang.php");  
  3. else
  4.     Header("Location: http://www.tuweb.com/index");
  5.  
  6. exit();  // obligatorio inmediatamente despues
__________________
Salu2!
  #3 (permalink)  
Antiguo 02/06/2014, 06:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Foreach dentro de un switch

si ya sabes el valor de $webLang para que quieres el resto de urls?


Código PHP:
Ver original
  1. foreach($lang_urls as $k=>$v){
  2.    if($v['language']==$webLang) Header....
  3. }
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 02/06/2014, 06:11
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Foreach dentro de un switch

O mejor...

Código PHP:
Ver original
  1. <?php
  2. // podria provenir de una consulta:
  3. $langs=array('es','en','fr','de'); // etc..
  4.  
  5. // ..
  6. if  ( (!empty($webLang)) and (in_array($webLang,$langs)) )
  7.     Header("Location: http://www.tuweb.com/index-$webLang.php");  
  8. else
  9.     Header("Location: http://www.tuweb.com/index");
  10.  
  11. exit();

Notas:

- Foreach() es innecesario... si usas in_array() es implicito
- exit() es obligatorio


PD: ignora mi comentario "solo puedes redireccionar a una pagina ... te parece tendria sentido se abrieran 50 ventanas con la pagina en 50 idiomas distintos ?" ... estoy muy dormido.. pero se hace como te digo.... ni siquiera se usa foreach()
__________________
Salu2!

Última edición por Italico76; 02/06/2014 a las 06:27
  #5 (permalink)  
Antiguo 02/06/2014, 06:32
 
Fecha de Ingreso: noviembre-2010
Mensajes: 146
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Foreach dentro de un switch

El caso es que las urls hacia las que quiero redirigir las tengo en el forech que viene de un consulta anterior.

El valor de $webLang me dice que idioma es, y con el hago el case para redirigir a una de las urls que tengo en el forech...

Creo que no me estoy explicando bien...

os pongo mas codigo a ver si lo veis mejor.

Código PHP:
// Si el idioma esta en la URL, grabarlo en una cookie 
        
$webLang=trim($_GET["wlang"]);
        if (
$webLang<>"") {
                
$expire=time()+60*60*24*30*6// 6 meses
                
setcookie("clang"$webLang$expire);
        } else {

    
// Hay una cookie de idioma definida
    
if (isset($_COOKIE["clang"])) {    
        
// leer idioma en la cookie
        
$webLang=$_COOKIE["clang"];

    
// No hay ninguna cookie de idioma definida    
    
} else {      
        
// detectar idioma del navegador
        
$webLang substr ($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
        if ((
$webLang<>"de") AND ($webLang<>"en") AND ($webLang<>"es") AND ($webLang<>"fr") AND ($webLang<>"it") AND ($webLang<>"ru") ) {
                
// Idioma por defecto, en caso de detectar un idioma raro que no tengamos
                
$webLang="es";
        }
        
$expire=time()+60*60*24*30*6// 6 meses
        
setcookie("clang"$webLang$expire);
    }
    
// Anti bucles infinitos (evita que si estamos en la página española, nos redirija a la página española y así una y otra vez sin parar.
    
if ($thisPageLang<>$webLang) {
        
// redireccionar al idioma correspondiente   
foreach($lang_urls as $k=>$v){        
        switch (
$webLang) {
            
            
             case 
$v['language'] :
             
Header('Location: http://www.quality-courses.com/'.$v['full_uri'].'');
            }
            
            
//default: 
               // Header('Location: http://www.quality-courses.com/');
        
}        
    }


  #6 (permalink)  
Antiguo 02/06/2014, 07:02
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Foreach dentro de un switch

Código PHP:
Ver original
  1. <?php
  2.  
  3. if ($thisPageLang!=$webLang) {
  4.     // redireccionar al idioma correspondiente  
  5.    
  6.     $langs=array('es','en','fr','de'); // etc..
  7.    
  8.     if  ( (!empty($webLang)) and (in_array($webLang,$langs)) )
  9.         Header("Location: http://www.tuweb.com/index-$webLang.php");  
  10.     else
  11.         Header("Location: http://www.tuweb.com/index");
  12.  
  13.     exit();
  14. }

Puede que este dormido perp analiza el codigo ante de decir que no te hemos ententendido
__________________
Salu2!
  #7 (permalink)  
Antiguo 02/06/2014, 08:03
 
Fecha de Ingreso: noviembre-2010
Mensajes: 146
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Foreach dentro de un switch

Si perdona quizas no me explique tampoco muy bien yo, veo que quizas tu codigo me sirve pero es que mis urls apra cada idioma no son del estilo

"Header("Location: http://www.tuweb.com/index-$webLang.php");"

por ello lo veo mas bien:

"case $v['language'] :
Header('Location: http://www.quality-courses.com/'.$v['full_uri'].'');"

Porque para cada case $v['language'] tengo una url distinta, ademas si ya estoy en una pagina por ejemplo "/cursos/" desde el menú de idiomas que he montado me va a la misma pero en el idioma correspondiente.
  #8 (permalink)  
Antiguo 02/06/2014, 08:32
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Foreach dentro de un switch

Haz por favor:

Código PHP:
Ver original 

<< con eso tengo la estructura exacta que puedo copiar directamente en mi script de pruebas


Yo trataria de enmendar un poco... asi:

Código PHP:
Ver original
  1. <?php
  2. $controller = isset($_GET['controller']) ? $_GET['controller'] : 'index';
  3. $action = isset($_GET['action']) ? $_GET['action' : 'default';
  4.  
  5. // voy a 'hardcodear' para mi ejemplo:
  6. $controller='users';
  7. $action='login';
  8.  
  9. // mis traducciones
  10. $v =[];
  11.  
  12. // aca traduzco todos los controladores y acciones
  13. $v['es'] = array('users'=>'usuarios','login'=>'ingreso','logout'=>'salir');
  14. $v['it'] = array('users'=>'utenti','login'=>'login','logout'=>'esci');
  15. // etc
  16.  
  17. if ($thisPageLang!=$webLang) {
  18.     // redireccionar al idioma correspondiente        
  19.    
  20.     # busco traduccion en $controller $v
  21.     # busco traduccion en $action $v
  22.     # armo como $controller/$action/$params
  23.    
  24.     // se entiende $param seria ya param1=...&param2=...&....
  25.     // aunque puede hacerse distinto claro
  26.    
  27.     if  ( (!empty($webLang)) and (array_key_exists($webLang,$v)))
  28.         Header("Location: http://www.tuweb.com/$controller/$action/$params");  
  29.     else
  30.         Header("Location: http://www.tuweb.com/index");
  31.  
  32.     exit();
  33. }

Controller y action son conceptos de MVC ... pero aca seria una mera "adaptacion"
__________________
Salu2!

Última edición por Italico76; 02/06/2014 a las 08:56

Etiquetas: foreach, switch
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 13:53.