Foros del Web » Programando para Internet » PHP »

Llamar a función dentro de un array al que se le aplica preg_replace

Estas en el tema de Llamar a función dentro de un array al que se le aplica preg_replace en el foro de PHP en Foros del Web. Buenas Me gustaría poder trabajar con una cadena que obtengo en un array con el $1 a través de una expresión regular de otra. Me ...
  #1 (permalink)  
Antiguo 20/11/2009, 11:39
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo Llamar a función dentro de un array al que se le aplica preg_replace

Buenas

Me gustaría poder trabajar con una cadena que obtengo en un array con el $1 a través de una expresión regular de otra.
Me explico, tengo esto:
Código PHP:
$a = array(
      
"/\[img\](.*?)\[\/img\]/is"
)

$b = array(
     
"<img src=\"$1\" style=\"width: 220px; height: 100px;\" />",
)

$todopreg_replace($a$b$todo); 
Y me gustaría poder usar la cadena que recibe la segunda expresión en $1 para pasarla por parámetro a una función y obtener una subcadena de la misma para usar por ejemplo en un link.
Algo similar a esto:

Código PHP:
$a = array(
      
"/\[img\](.*?)\[\/img\]/is"
)

$b = array(
     
"<a href=\""subcadena("$1"). "\"> <img src=\"$1\" style=\"width: 220px; height: 100px;\" /></a>",

Siendo subcadena una funcion en PHP definida por mi.

El problema que me encuentro es que cuando esa función recibe el parámetro, no recibe la cadena en si, sino el simbolo "$1", a pesar de que si esa función hiciera un return de la misma tal cual la recibe, si que obtengo la cadena en la página final interpretada.

No se si es debido a que hago algo mal o a que simplemente no se puede hacer lo que quiero.

En caso de que no se pueda hacer, ¿qué me recomendaríais para poder obtener una subcadena de ese $1 que tengo en el array y que desconozco cual puede ser?

Saludos.
Si me he explicado mal, decídmelo.

Última edición por IMAC/; 20/11/2009 a las 11:59
  #2 (permalink)  
Antiguo 20/11/2009, 11:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

Puedes usar preg_replace_callback para el efecto
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 20/11/2009, 11:58
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

¿Como sería exactamente?

Supongo que no se podría aplicar solamente a una regla de cada array ¿no?
El array tiene varias reglas, tipo:

Código PHP:
$a = array(
      
"/\[img\](.*?)\[\/img\]/is",
      
"/\[db\](.*?)\[\/db\]/is"
)

$b = array(
     
"<img src=\"$1\" style=\"width: 220px; height: 100px;\" />",
     
"hola $1 "

  #4 (permalink)  
Antiguo 20/11/2009, 12:02
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

En ese caso podrías usar el modificador e (eval) en preg_replace:
Código PHP:
Ver original
  1. $a = array(
  2.     '/regexp/e',
  3.     // etc.
  4. );
  5. $b = array(
  6.     'funcion("\\1")'
  7.     // etc.
  8. );
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 21/11/2009, 09:43
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

No acabo de entender el funcionamiento de la función
preg_replace_callback

A diferencia de preg_replace no tiene un parámetro donde indicarle el array de reemplazamiento.

¿Podrías poner un ejemplo completo (array y llamada a función) de como utilizar esta función y la construcción del array para hacer lo que busco?

Muchas gracias.
  #6 (permalink)  
Antiguo 21/11/2009, 09:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

Cita:
Iniciado por IMAC/ Ver Mensaje
No acabo de entender el funcionamiento de la función
preg_replace_callback

A diferencia de preg_replace no tiene un parámetro donde indicarle el array de reemplazamiento.

¿Podrías poner un ejemplo completo (array y llamada a función) de como utilizar esta función y la construcción del array para hacer lo que busco?

Muchas gracias.
es idéntico, si revisas el manual te darás cuenta que los parámetros son los mismos...

a excepción de que el valor de reemplazo debe ser un callback...
Código PHP:
preg_replace_callback(array('/foo/i'), array('bar'), 'candy foo does nothing');
function 
bar($matches)
{
  return 
strtoupper($matches[0]);

como puedes notar, el argumento que recibe la función callback es un arreglo con las capturas de la expresión... lo que devuelves con return es el reemplazo final de la cadena...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 21/11/2009, 10:50
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

Debo de ser un poco corto, pero no acabo de entenderlo con esos ejemplos...

Veamos, aplicado a mi caso ¿sería así?

Código PHP:
function subcadena($matches){
      
$new_cadena explode = ("/"$matches);
       return 
'<a href="'.$new_cadena[4].'"> <img src=\"$matches\" style=\"width: 100px; height: 100px;\" /></a>';
}

$a = array(
      
"/\[img\](.*?)\[\/img\]/is"
)

$b = array(
     
"subcadena",
)  

preg_replace_callback($a$b$todo); 
Saludos.
  #8 (permalink)  
Antiguo 21/11/2009, 11:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

algo así... el callback se implementa como bien lo haces...

pero estas usando mal los argumentos, ya que el primer argumento siempre es un arreglo ya... no es necesario el explode() o algún tratamiento mas
Código PHP:
$img $matches[1];
return 
'<a href="' $img '"><img src="' $img '" alt="' basename($img) . '"/></a>'
te sugiero analices la variable con var_dump() antes de implementar tu procedimiento... por lo demás, todo bien...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 21/11/2009, 12:39
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Llamar a función dentro de un array al que se le aplica preg_replace

Cita:
Iniciado por pateketrueke Ver Mensaje
algo así... el callback se implementa como bien lo haces...

pero estas usando mal los argumentos, ya que el primer argumento siempre es un arreglo ya... no es necesario el explode() o algún tratamiento mas
Bueno, lo del explode es un ejemplo, es por poner algo en la función para que se vea que no quiero dejar el parámetro tal cual, sino modificarlo o usar parte del mismo para mis intereses.

Saludos y gracias.
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 05:18.