Foros del Web » Programando para Internet » PHP »

Duda con simplificación de variables

Estas en el tema de Duda con simplificación de variables en el foro de PHP en Foros del Web. Hola, en el siguiente ejemplo muestro 2 casos de repetición de variables, pero en realidad son como 12: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $prefijos ...
  #1 (permalink)  
Antiguo 11/07/2013, 18:51
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.026
Antigüedad: 18 años, 7 meses
Puntos: 832
Duda con simplificación de variables

Hola, en el siguiente ejemplo muestro 2 casos de repetición de variables, pero en realidad son como 12:

Código PHP:
Ver original
  1. $prefijos = !empty($opcion['prefijos']) ? $opcion['prefijos'] : null;
  2. $empaques = !empty($opcion['empaques']) ? $opcion['empaques'] : null;
  3. // Etc...
  4.  
  5. $implode_prefijos = !empty($prefijos) ? implode(',' , $prefijos) : null;
  6. $implode_empaques = !empty($empaques) ? implode(',' , $empaques) : null;
  7. // Etc...

Entonces hice este bucle para ahorrarme la repetidera. Esto supuestamente debería funcionar pero hasta el momento no arranca:

Código PHP:
Ver original
  1. $datos = array('prefijos' , 'empaques' , 'etc...');
  2.  
  3. foreach ($datos as $d) {
  4.     ${$d} = !empty($opcion[$d]) ? $opcion[$d] : null;
  5.     $implode_{$d} = !empty($$d) ? implode(',' , $$d) : null;
  6. }
¿Cómo le hago? Tengo rato dándole vueltas sin éxito.
  #2 (permalink)  
Antiguo 11/07/2013, 18:55
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 14 años, 8 meses
Puntos: 127
Respuesta: Duda con simplificación de variables

que necesitas hacer especificamente validar si la variable tiene datos o si esta declarada??
  #3 (permalink)  
Antiguo 11/07/2013, 18:59
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.026
Antigüedad: 18 años, 7 meses
Puntos: 832
Respuesta: Duda con simplificación de variables

Necesito que el ejemplo de abajo se comporte exactamente como el de arriba ;)
  #4 (permalink)  
Antiguo 11/07/2013, 19:37
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 15 años, 9 meses
Puntos: 292
Respuesta: Duda con simplificación de variables

Código PHP:
Ver original
  1. <?php
  2. $opcion['prefijos'] = array ('br_','ar_','pt_','us_');
  3. $opcion['empaques'] = array ('plastico','papel','metalico');
  4.  
  5. $implode = array();
  6. foreach ((array) $opcion as $key=>$arr){
  7.     $implode[$key] = implode (',',(array)$arr);
  8. }
  9.  
  10. var_dump($implode);


El casting a Array dentro del foreach, ese (array), es para evitar que explote sino hay nada en $opcion y luego por lo mismo declaro un array vacio $implode pues sino entra al foreach podria quedar sin declarar

Creo que la primera parte ya no tiene sentido pues aplico el mismo hack dentro del implode:

Código PHP:
Ver original
  1. implode (',',(array)$arr);

Una cosa que no has dicho y que no quise presuponer es que tienes la misma cantidad de elementos en cada array, o sea que son arrays paralelos

PD: lo intente hacer con variables variables pero creeria que PHP no soporta crear "variables variables tipo array"
__________________
Salu2!

Última edición por Italico76; 11/07/2013 a las 19:53
  #5 (permalink)  
Antiguo 11/07/2013, 22:11
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.026
Antigüedad: 18 años, 7 meses
Puntos: 832
Respuesta: Duda con simplificación de variables

Ja Italico! mira cómo se solucionó el entuerto. Cuando lo descubrí quedé así => :
El truco está en construir previamente el nombre de la variable como un valor, y luego usarlo como variable-variable:

Código PHP:
Ver original
  1. foreach ($datos as $d) {
  2.     $var = 'implode_' .$d; // Aquí se construye el nombre
  3.     ${$d} = !empty($opcion[$d]) ? $opcion[$d] : null;
  4.     $$var = !empty(${$d}) ? implode(',' , ${$d}) : null;
  5. }
Ahora funciona perfecto. Le puedo meter los elementos que quiera sin problema.

De verdad ignoraba este procedimiento. Me fijé en un ejemplo que un usuario posteó en el rincón más oscuro y remoto del manual de PHP (por eso digo que, en ocasiones, esos comentarios sirven más que la misma explicación oficial). Igualmente gracias por tu ayuda hermanazo!

Como referencia: la variable $opcion es un array multidimensional que me traigo de la BD.
  #6 (permalink)  
Antiguo 11/07/2013, 22:16
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 15 años, 9 meses
Puntos: 292
Respuesta: Duda con simplificación de variables

@metacortex: jeje muy bueno! algo nuevo aprendido
__________________
Salu2!

Etiquetas: bucle, variables
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:28.