Foros del Web » Programando para Internet » PHP »

Diferencia entre preg_replace y preg_filter

Estas en el tema de Diferencia entre preg_replace y preg_filter en el foro de PHP en Foros del Web. Esa es la duda ya lei el manual y dice la diferencia solo que no la comprendo y mas que nada no la veo. Alguien ...
  #1 (permalink)  
Antiguo 06/09/2011, 19:38
Avatar de hackjose  
Fecha de Ingreso: abril-2010
Ubicación: Edo Mexico
Mensajes: 1.178
Antigüedad: 14 años, 7 meses
Puntos: 131
Diferencia entre preg_replace y preg_filter

Esa es la duda ya lei el manual y dice la diferencia solo que no la comprendo y mas que nada no la veo.
Alguien me podria decir cual es la diferencia y si dieran un ejemplo que mejor hay uno en el manual.
Gracias y saludos
  #2 (permalink)  
Antiguo 06/09/2011, 19:39
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Diferencia entre preg_replace y preg_filter

Cita:
preg_filter() es idéntica a preg_replace() excepto que sólo devuelve los sujetos (posiblemente tranformados) donde hubo una coincidencia.
Código PHP:
Ver original
  1. <?php
  2. $sujeto = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
  3. $patrón = array('/\d/', '/[a-z]/', '/[1a]/');
  4. $sustitución = array('A:$0', 'B:$0', 'C:$0');
  5.  
  6. echo "preg_filter devuelve\n";
  7. print_r(preg_filter($patrón, $sustitución, $sujeto));
  8.  
  9. echo "preg_replace devuelve\n";
  10. print_r(preg_replace($patrón, $sustitución, $sujeto));
  11. ?>
Cita:
preg_filter devuelve

Array
(
[0] => A:C:1
[1] => B:C:a
[2] => A:2
[3] => B:b
[4] => A:3
[7] => A:4
)

preg_replace devuelve

Array
(
[0] => A:C:1
[1] => B:C:a
[2] => A:2
[3] => B:b
[4] => A:3
[5] => A
[6] => B
[7] => A:4
)
en resumen preg_filter es como hacer un preg_replace + array_diff, antes de PHP 5.3.0 se puede lograr el mismo resultado que preg_filter, combinando estas 2 funciones.

Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 06/09/2011 a las 20:39 Razón: Más info
  #3 (permalink)  
Antiguo 07/09/2011, 01:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Diferencia entre preg_replace y preg_filter

Lo que devuelve es solo aquellos en donde se hizo el cambio, mientras que en preg_replace devuelve en donde se hizo el cambio y donde no se hizo. Si te fijas en el ejemplo que colocó andres hay dos valores que no estan mencionados en preg_filter y en preg_replace sí. Porque la expresion regular busca solo aquellos valores alpha que son en minuscula y preg_filter solo hizo cambios a los valores alpha que son minusculas por eso solo devolvio esos valores.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 07/09/2011, 01:17
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Diferencia entre preg_replace y preg_filter

Gracias por completar @abimaelrc lo que me pareció más curioso cuando aprendí sobre la función es el tema de que preg_replace + array_diff da el resultado de preg_filter

Código PHP:
Ver original
  1. <?php
  2. $str = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
  3. $p = array('/\d/', '/[a-z]/', '/[1a]/');
  4. $r = array('A:$0', 'B:$0', 'C:$0');
  5. $prerep = preg_replace($p, $r, $str);
  6. $res = array_diff($prerep, $str);
  7. $res2 = preg_filter($p, $r, $str);
  8. echo '<pre>';
  9. print_r($res);
  10. print_r($res2);
  11. echo '</pre>';
$res con preg_replace + array_diff y $res2 con preg_filter dan el mismo resultado.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 07/09/2011, 09:45
Avatar de hackjose  
Fecha de Ingreso: abril-2010
Ubicación: Edo Mexico
Mensajes: 1.178
Antigüedad: 14 años, 7 meses
Puntos: 131
Respuesta: Diferencia entre preg_replace y preg_filter

Cita:
Iniciado por abimaelrc Ver Mensaje
Lo que devuelve es solo aquellos en donde se hizo el cambio, mientras que en preg_replace devuelve en donde se hizo el cambio y donde no se hizo. Si te fijas en el ejemplo que colocó andres hay dos valores que no estan mencionados en preg_filter y en preg_replace sí. Porque la expresion regular busca solo aquellos valores alpha que son en minuscula y preg_filter solo hizo cambios a los valores alpha que son minusculas por eso solo devolvio esos valores.
Gracias

Etiquetas: diferencia
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 09:25.