Foros del Web » Programando para Internet » PHP »

function para extraer variables

Estas en el tema de function para extraer variables en el foro de PHP en Foros del Web. Hola a todos: Para extraer variables dentro de una cadena utilizo la función eval de la siguiente forma. Código PHP: $cadena  =  'taza' ; $nombre  ...
  #1 (permalink)  
Antiguo 10/03/2011, 13:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 149
Antigüedad: 19 años, 1 mes
Puntos: 0
function para extraer variables

Hola a todos:

Para extraer variables dentro de una cadena utilizo la función eval de la siguiente forma.
Código PHP:
$cadena 'taza';
$nombre 'café';
$str 'Esto es una $cadena con mi $nombre en ella.';
echo 
$str"<br>";
eval(
"\$str = \"$str\";");
echo 
$str"<br>"
Esto lo realiza de forma correcta.
La salida es:
Cita:
Esto es una $cadena con mi $nombre en ella.
Esto es una taza con mi café en ella.
Ahora bien, el problema me surge cuando intento hacerlo con funciones.
Este código es el que he utilizado sin éxito:
Código PHP:
$cadena 'taza';
$nombre 'café';
$str2 'Esto es una $cadena con mi $nombre en ella.';
function 
extraevariable($cadena){
    eval(
"\$cadena_out = \"$cadena\";");
    return 
$cadena_out;
echo 
'<br>otra forma: '.extraevariable($str2); 
Alguien me puede ayudar para utilizarlo en forma de función??
Gracias.
  #2 (permalink)  
Antiguo 10/03/2011, 13:49
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas - Venezuela
Mensajes: 52
Antigüedad: 13 años, 1 mes
Puntos: 6
Respuesta: function para extraer variables

Está facil.. No necesitas función alguna....
Si estás en PHP los literales sencillos (') te escapan el texto exacto mientras que los dobles (") te permiten incrustar las variables.

Código PHP:
Ver original
  1. $cadena = "taza";
  2. $nombre = "café";
  3. echo 'Esto es una $cadena con mi $nombre en ella.';
  4. // resultado: Esto es una $cadena con mi $nombre en ella.
  5.  
  6. echo "Esto es una $cadena con mi $nombre en ella.";
  7. // resultado: Esto es una taza con mi café en ella.

Por eso es importante saber cuando usar los literales sencillos y los dobles. No podemos simplemente usar un solo tipo por "estética".
  #3 (permalink)  
Antiguo 10/03/2011, 13:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: function para extraer variables

si ese es todo tu código es claro que tienes problemas al escribir tus propias funciones, te sugiero consultar le manual:
http://php.net/manual/es/language.functions.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 10/03/2011, 13:59
 
Fecha de Ingreso: marzo-2005
Mensajes: 149
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: function para extraer variables

El código es más complejo, simplemente quise poner un ejemplo fácil.

La realidad es que tengo variables con los días de la semana (en diferentes idiomas), de forma que:
$dia_lunes=monday;
$dia_martes=tuesday; ..... etc.

En la base de datos en su campo correspondiente esta escrito por ejemplo: "lunes"
y lo extraigo de la siguiente forma:
Código PHP:
$dia_publicacion='$dia_'.$array_noticias['n_dia'];
eval(
"\$dia_publicacion = \"$dia_publicacion\";"); 
Esto lo hace correctamente y extrae el dia en funcion del idioma.

ahora bien estoy intentando hacerlo en forma de función porque cuando utilizo un bucle para extraer los datos... no me toma la variable.

He intentado esto:
Código PHP:
function diacorte($dia_bd){
    
$dia_bd_corte='$dia_'.$dia_bd;
    eval(
"\$dia_bd_corte = \"$dia_bd_corte\";");
    return 
$dia_bd_corte;
}
echo 
diacorte($array_noticias['n_dia']); 
pero sin éxito.

por cierto, tu enlace es el pan de cada día, pero la respuesta que das no es resolutiva.

queda ahora más claro?? ...imagino que no

Solo espero que alguien me oriente como hacerlo, que para los enlaces ya esta google. Por eso pregunto en un foro especializado.
Gracias.

Última edición por etanol; 10/03/2011 a las 14:13
  #5 (permalink)  
Antiguo 10/03/2011, 14:18
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas - Venezuela
Mensajes: 52
Antigüedad: 13 años, 1 mes
Puntos: 6
Respuesta: function para extraer variables

Si... queda mas clara la explicación... Manual de la función eval():
Código HTML:
Ver original
  1. Note: Because this is a language construct and not a function, it cannot be called using variable functions

Intenta con:

Código PHP:
Ver original
  1. function diacorte($dia_bd){
  2.     $dia_bd_corte='$dia_'.$dia_bd;
  3.     eval("\$dia_bd_corte = \"$dia_bd_corte\"; return $dia_bd_corte; ");
  4. }
  #6 (permalink)  
Antiguo 10/03/2011, 14:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: function para extraer variables

y en primer lugar yo usaría arreglos...
Código PHP:
$dia['lunes'] = 'monday';

$variable 'lunes';
echo 
$dia[$variable]; // monday 
segundo, si la cadena a evaluar contiene variables dichas variables deberían ubicarse en el contexto de la función, ya que si están en otro lado es imposible que se acceda a ellas...

por eso te puse el enlace, para que observes como se maneja el contexto de las variables cuando usamos funciones...

otro enlace útil es el siguiente:
http://www.php.net/manual/en/languag...bles.scope.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 10/03/2011, 14:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 149
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: function para extraer variables

Hola de nuevo. He probado el código que has enviado pero sigue sin resolverse el problema.

Respecto a los arreglos, estoy de acuerdo contigo en que los errores por comillas se reducen considerablemente de esa forma.

En el caso de que el problema venga determinado por las variables he probado:
Código PHP:
function diacorte($dia_bd){
   
$dia_bd_corte='$GLOBALS['dia_'.$dia_bd]';
   eval(
"\$dia_bd_corte = \"$dia_bd_corte\"; return $dia_bd_corte; ");

pero no he tenido éxito tampoco.
Hay alguna forma de hacerlo?
Gracias
  #8 (permalink)  
Antiguo 10/03/2011, 14:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: function para extraer variables

mira esto...
Código PHP:
$GLOBALS['foo']['candy'] = 'BAR';

function 
does($a)
{
  return 
$GLOBALS['foo'][$a];
}

echo 
does('candy'); // BAR 
¿cual es la necesidad de usar eval()?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 10/03/2011, 14:49
 
Fecha de Ingreso: marzo-2005
Mensajes: 149
Antigüedad: 19 años, 1 mes
Puntos: 0
De acuerdo Respuesta: function para extraer variables

¡¡¡¡¡Conseguido!!!
Código PHP:
function diacorte($dia_bd){
   
$dia_bd_corte='$GLOBALS[dia_'.$dia_bd.']';
   eval(
"\$dia_bd_corte = \"$dia_bd_corte\"; ");
   return 
$dia_bd_corte;

Gracias por la orientación.
  #10 (permalink)  
Antiguo 10/03/2011, 16:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: function para extraer variables

Usar eval no es recomendable, puedes hacer sin ningún problema:
Código PHP:
Ver original
  1. $dia_corte = "dia_{$dia_bd}";
  2. echo $$dia_corte;

Saludos.

Etiquetas: function, 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




La zona horaria es GMT -6. Ahora son las 12:50.