Foros del Web » Programando para Internet » PHP »

se puede usar explode con varios separadores???

Estas en el tema de se puede usar explode con varios separadores??? en el foro de PHP en Foros del Web. Les voy a dar unos ejemplos de una cadena de emails que quiero usarlos para enviar newsletter 1.- "[email protected];[email protected];email3@domin io.com" este se puede facilmente 2.- ...
  #1 (permalink)  
Antiguo 24/08/2008, 18:42
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 17 años, 1 mes
Puntos: 0
se puede usar explode con varios separadores???

Les voy a dar unos ejemplos de una cadena de emails que quiero usarlos para enviar newsletter

1.- "[email protected];[email protected];email3@domin io.com" este se puede facilmente

2.- "[email protected]; [email protected]; [email protected]" acá ya se me complica, porque tengo ";" y " "(espacio)

3.- "[email protected]
[email protected]
[email protected]" en este caso, tengo un email por linea

Mi duda es, cómo puedo hacer con estos dos últimos?
  #2 (permalink)  
Antiguo 24/08/2008, 18:50
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: se puede usar explode con varios separadores???

Hi !

En el segundo caso puedes separar por el "PUNTO Y COMA" ( ; ) y luego hacer un "trim()" al resultado y con eso eliminarías los espacios.

En el tercer caso deberias hacer el explode por el salto de linea (\n). (No sé si funciona, pero podrias probar :P).
Confirmo:
Puedes hacer: $res = explode("\n", $cadena);

Dejo un ejemplo:
Código PHP:
<?php
        $cadena_2 
"[email protected][email protected][email protected][email protected]";
        
$res_2 explode(";"$cadena_2);
        
        
$num count($res_2);
        
        for (
$i=0$i $num$i++) {
            
$res[$i] = trim($res[$i]);
        }
        
        
print_r($res_2);
        
        echo 
"<br />";
        
        
// Ejemplo con Cadena 3
        // --------------------
        
$cadena_3 "[email protected]
        [email protected]
        [email protected]
        [email protected]"
;
        
        
$res explode("\n"$cadena_3);
        
        
print_r($res);    
?>
Saludos.
__________________
--
Mi Portfolio Online! Visitalo!
--

Última edición por Proguri; 24/08/2008 a las 18:58
  #3 (permalink)  
Antiguo 24/08/2008, 19:50
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: se puede usar explode con varios separadores???

La funcion trim() de PHP solo elimina espacios al principio y al final de la cadena.

Si quieres lo que puedes hacer es eliminar los espacios con un str_replace();

Última edición por Ronruby; 24/08/2008 a las 20:06
  #4 (permalink)  
Antiguo 24/08/2008, 21:32
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: se puede usar explode con varios separadores???

Hi !

Para el caso está utilizada para quitar el espacio que se genera entre el signo " ; " (punto y coma) y (justamente) el espacio.

Siempre se va a encontrar al principio o fin de la cadena al hacer el explode. Por eso no es necesario utilizar str_replace();

Igualmente es otro metodo para hacerlo :).

-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
  #5 (permalink)  
Antiguo 24/08/2008, 21:48
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: se puede usar explode con varios separadores???

Ahhhhh ok! Te referias luego de hacer el explode :P En ese caso entonces si.
  #6 (permalink)  
Antiguo 24/08/2008, 22:00
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: se puede usar explode con varios separadores???

La función split() es similar a explode(), sólo que en este caso tiene la ventaja de aceptar un patrón de expresiones regulares en vez de un solo caracter como separador.

Código PHP:
$str "[email protected]
[email protected]
[email protected]"
;
 
$emails split("[\t\n\r; ]+",$str); //Agregas a la expresión los caracteres que deseas usar 
Saludos,
  #7 (permalink)  
Antiguo 25/08/2008, 10:45
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: se puede usar explode con varios separadores???

Gracias por contestar muchachos, pero no logro que me salga lo que quiero mas que con explode() y solo un separador.

yo creo que lo que dice okram me serviria mucho (para poder quitar varios separadores posibles), pero no me sale nada :(
  #8 (permalink)  
Antiguo 25/08/2008, 15:50
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: se puede usar explode con varios separadores???

Cómo que no? Te aparece algún error?

Mira aquí: http://lab.phperu.net/split (código)... Prueba poniendo en el campo de texto:

y ves el resultado.

Saludos,
  #9 (permalink)  
Antiguo 25/08/2008, 16:02
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: se puede usar explode con varios separadores???

Muchas gracias okram, con el código que me pasaste me funciono tal como yo quería (Y)
  #10 (permalink)  
Antiguo 25/09/2008, 23:06
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: se puede usar explode con varios separadores???

Una consulta más, necesito usar la funtion mail();
Creo que podría ser con foreach, pero no me salio :(


Código PHP:
<?php

if(isset($_POST['enviar'])) {
    
//Si venimos del formulario, extraemos los emails
    
$str htmlentities($_POST['emails']); //Por seguridad, uso htmlentities con el contenido enviado 
    
$emails split("[\t\n\r ;,]+"$str); //Los separadores son espacios, tabulaciones, saltos de linea, ; y ,
    //Imprimir los emails, guardados en $emails como un array
    
echo '<pre>';
    
print_r($emails);
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Ingrese los emails separados por comas, punto y comas, espacios, tabulaciones o saltos de linea:
    <textarea name="emails" cols="50" rows="7"><?php echo $_POST['emails'];?></textarea>
    <br />
    <input type="submit" name="enviar" value="Enviar los correos"/>
</form>
  #11 (permalink)  
Antiguo 26/09/2008, 20:28
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: se puede usar explode con varios separadores???

Puedes poner el código con el foreach que intentaste utilizar? La lógica es: Haces un foreach o cualquier otro método para recorrer arrays, y por cada elemento del arreglo (por cada email) debes ejecutar la función mail(). Así, enviarás tantos mails como correos tengas en tu arreglo.

Saludos,
  #12 (permalink)  
Antiguo 26/09/2008, 20:48
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: se puede usar explode con varios separadores???

Código PHP:
if(isset($_POST['enviar'])) {
    
//Si venimos del formulario, extraemos los emails
    
$str htmlentities($_POST['emails']); //Por seguridad, uso htmlentities con el contenido enviado 
    
$emails split("[\t\n\r ;,]+"$str); //Los separadores son espacios, tabulaciones, saltos de linea, ; y ,
    //Imprimir los emails, guardados en $emails como un array
    
echo '<pre>';
    
print_r($emails);
    echo 
'</pre>';

      foreach(
$emails as $to){
    
mail($to$subject$msg$from);
    } 
El foreach sería algo así, lo probe con array predefinido, pero no se como hacer en este caso.
  #13 (permalink)  
Antiguo 26/09/2008, 22:45
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: se puede usar explode con varios separadores???

Pues así debe funcionar. Te manda algún tipo de error? Cuál es el problema?
  #14 (permalink)  
Antiguo 28/09/2008, 13:18
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: se puede usar explode con varios separadores???

No me genera los arrays como variable, solamente me los imprime
  #15 (permalink)  
Antiguo 28/09/2008, 20:11
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: se puede usar explode con varios separadores???

El foreach recorre toooodo el array, cierto? Ahí no está el problema. Dónde estás probando tu código? En localhost? Probablemente no tengas instalado un servidor SMTP o éste no esté activo, lo que hace que la función mail(), aunque no da error, no funcione. Puedes probar otra opción para enviar correos, como PHPMailer.

Para que veas lo que te estoy diciendo, prueba imprimiendo cualquier cosa dentro del foreach. Verás que el ciclo sí se ejecuta:

Código php:
Ver original
  1. foreach($emails as $to){
  2.     echo "<br>";
  3.     echo "Enviando a <b>$to</b>: ";
  4.     if(mail($to, $subject, $msg, $from)) {
  5.         echo "Envio correcto";
  6.     } else {
  7.         echo "Envio incorrecto";
  8.     }
  9. }

Saludos,
  #16 (permalink)  
Antiguo 28/09/2008, 21:38
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: se puede usar explode con varios separadores???

Gracias okram!
me quedo así el código y me funciona correctamente (Y)

Código PHP:
<?php
if(isset($_POST['enviar'])) {

    
$str htmlentities($_POST['emails']);
    
$emails split("[\t\n\r ;,]+"$str);

    foreach(
$emails as $to){
      echo 
"<br>";
      echo 
"Enviando a <b>$to</b>: ";
      if(
mail($to$subject$msg$from)) {
          echo 
"Envio correcto";
      } else {
          echo 
"Envio incorrecto";
      }
    }

}
?>
<form action="" method="post">
    Ingrese los emails separados por comas, punto y comas, espacios, tabulaciones o saltos de linea:
    <textarea name="emails" cols="50" rows="7"><?php echo @$_POST['emails'];?></textarea>
    <br />
    <input type="submit" name="enviar" value="Enviar los correos"/>
</form>
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 11:04.