Separar una cadena por un caracter utilizando la función Explode() de PHP

Bienvenidos a ver tutoriales.com, en esta ocasión os traigo un ejemplo de la utilización de la función explode() de php.

Esta función recibe 2 parametros y genera un array con el número de elementos que encuentra en la cadena que se le proporcione, que estén separados por el caracter elegido.

Para explicarme mejor y lo comprendais más facilmente, si tengo la cadena «juan, carlos, roberto» y utilizamos explode para separar por el caracter «,» nos daría como resultado un array con 3 elementos el primero juan, el segundo carlos y tercero roberto.

Veamos un ejemplo:

<?
// EJEMPLO DE LA FUNCION EXPLODE
$cadena = ‘juan, carlos, roberto’;
$tutorial = explode(‘,’,$cadena);

// RESULTADO
echo «Nombre 1″.$tutorial[0].»<br>»;
echo «Nombre 2″.$tutorial[1].»<br>»;
echo «Nombre 3″.$tutorial[2].»<br>»;

?>

En el ejemplo anterior de la función explode podemos ver la asignación a $cadena, y la utilización de explode con el primer parametro que se le pasa con la «,» para separar la cadena que a continuación le pasamos $cadena, almacenandola en el array tutorial. Luego simplemente mostramos el array por pantalla utilizando un echo y accediendo a cada elemento del array.

¿Pero que ocurriría si no sabemos los elementos que tiene el array?

Pues no pasa nada… Si quieres recorrer un array sin saber la dimensión que tiene podemos utilizar un bucle foreach que explicamos en el tutorial anterior de igual manera que recorrimos el array $_POST().

Así podemos tener el control del array y tratar la información como queramos.

Espero que os haya sido de ayuda. De igual manera espero vuestros comentarios, que últimamente recibo más correos y muchos repetidos, si comentais nos ayudamos entre todos.

Un saludo!

Carlos Dk

Apasionado por la enseñanza y el SEO

34 comentarios en “Separar una cadena por un caracter utilizando la función Explode() de PHP

  • el 26 diciembre, 2011 a las 6:28 pm
    Permalink

    ¿Y cómo le hago para que en lugar de poner un $cadena = ‘juan, carlos, roberto’; sea los nombres de una base de datos?

    Tengo esto, me muestra los datos pero no me los separa:

    <?php
    echo '’;
    $link = mysql_connect(«localhost», «root»);
    mysql_select_db(«nombres», $link);
    $result = mysql_query(«SELECT nombre_completo FROM nombres_completos», $link);
    echo » \n»;
    echo «Nombre Completo \n»;
    while ($row = mysql_fetch_row($result))
    {
    echo » $row[0]\n»;
    }
    echo «»;

    $cadena = $_POST[campo];
    $elementos = explode(» «, $cadena);
    echo $elementos[0];
    echo $elementos[1];
    echo $elementos[2];
    echo $elementos[3];
    echo »;
    echo »;
    ?>

    Gracias por la ayuda

    Respuesta
    • el 27 diciembre, 2011 a las 8:57 am
      Permalink

      $cadena = $_POST[campo]; sirve para recoger de un formulario, así que no es la manera correcta a no ser que lo estés enviando por ese método a rellenar la variable.

      Tendrás que utilizar $row[0] que es el array que contiene el dato de nombre_completo y meter el explode dentro del while. Quedaría algo así:
      while ($row = mysql_fetch_row($result))
      {
      $elementos = explode(” “, $row);
      echo $elementos [0];
      echo $elementos [1];
      echo $elementos [2];
      echo $elementos [3];
      }

      Volviendo a explicarlo sobre el código, leemos el registro, lo separamos con explode y guardamos en $elementos y luego simplemente lo mostramos.

      Ya nos cuentas. Un saludo!

      Respuesta
  • el 27 diciembre, 2011 a las 6:35 pm
    Permalink

    De lujo, quedó perfectamente. Gracias.

    Respuesta
  • el 28 diciembre, 2011 a las 5:21 pm
    Permalink

    Ahí está el código final, ahora me surgieron otras dos 3 dudas:
    1. ¿Cómo guardo esos datos ya separados en una base de datos de MySql según yo es como lo puse en la parte de hasta abajo pero creo que no funciona?

    2. Si por ejemplo existe un nombre como «De La Cruz Mora Evangelina» como se haría para separarlo en apellido paterno, materno y nombre?

    3. Si tiene dos o más nombres se pueden meter en 1 sólo campo?

    <?php

    echo "»;
    echo «»;

    echo «Apellido Paterno»;
    echo «Apellido Materno»;
    echo «Nombre»;
    echo «»;

    $link = mysql_connect(«localhost», «root»);
    mysql_select_db(«nombres», $link);
    $result = mysql_query(«SELECT nombre_completo FROM nombres_completos», $link);
    while ($row = mysql_fetch_row($result))
    {
    echo «»;
    $elementos = explode(» «,$row[0]);
    echo «$elementos[1]»;
    echo «$elementos[2]»;
    echo «$elementos[0]»;
    echo «»;
    }

    $nombre = $elementos[0];
    $apaterno = $elementos[1];
    $amaterno = $elementos[2];

    $sql = «Insert Into nombres_separados(nombre, apellido_paterno, apellido_mat)»;
    $sql .= «Values («.$nombre.»,'».$apaterno.»‘,'».$amaterno.»‘)»;

    ?>

    Respuesta
    • el 28 diciembre, 2011 a las 5:46 pm
      Permalink

      Empiezo a responder de atrás a adelante:

      3) No tienes problema en guardar dos o más nombres en un campo, una A es como un 3 o un » «, es decir, es una cadena como otra cualquiera.

      2) No hay manera de identificar cual es el nombre, el apellido paterno y materno. A no ser que se hiciera alguna comprobación de contraste con alguna lista de nombres, pero aún así, hay apellidos que pueden ser nombres y nombres que pueden ser apellidos. Será un algoritmo más complicado, tambien puedes buscar nombres que tengan «de» o «la» o «de la», algo más complejo viendo todas las variantes, no le veo solución rápida.

      1) Tal y como tienes hecho el Insert, solo te quedaría lanzar la consulta con mysql_query(«»);

      Respuesta
  • el 9 enero, 2012 a las 8:02 pm
    Permalink

    Que tal, disculpen las molestias y espero me puedan ayudar:

    Tengo una consulta la cual el dato que quiero recuperar esta almacenado de la siguiente forma: «1-0-0», lo que pretendo es descomponer esa cadena para poder obtener cada uno de los números, mi código es el siguiente:

    Al ejecutarlo, no me muestra nada, ni un mensaje de error ni ningun dato, espero alguien me pueda ayudar para ver donde estoy mal o cual es mi error, de antemano gracias.

    Respuesta
    • el 9 enero, 2012 a las 11:51 pm
      Permalink

      Tendrás que hacer
      $cadena = «1-0-0»
      $tutorial = explode(‘-‘,$cadena);

      Con ese código debe de funcionarte.

      Un saludo!

      Respuesta
  • el 27 enero, 2012 a las 5:32 pm
    Permalink

    Hola tengo us problemilla, mi codigo separa con el explode, tranforma a mayúsculas pero antes de insertar un valor quiero hacer una consulta para comparar que ese dato no ha sido guardado y mandar un mensaje de ya existe o caso contrario guardar el dato, pero me marco un error, según yo es en mi sintaxis de –> $consulta = «select * from nombres_separados»;
    if ($elemento[3] = $consulta) etc etc etc

    gracias y ojalá me puedas ayudar

    $link = mysql_connect(«localhost», «root», «»);
    mysql_select_db(«nombres», $link);
    $result = mysql_query(«SELECT nombre_completo FROM nombres_completos», $link);
    while ($row = mysql_fetch_row($result))
    {
    $cadena = $row[0];

    $elemento = explode(» «, $cadena);
    if (($elemento[3]))
    {
    $user0=strtoupper($elemento[0]);
    echo «$user0»;
    $user1=strtoupper($elemento[1]);
    echo «$user1»;
    $user2=strtoupper($elemento[2]);
    $user7=strtoupper($elemento[3]);
    echo «$user2 $user7»;

    $consulta = «select * from nombres_separados»;
    if ($elemento[3] = $consulta)
    {
    echo «Ya existe $elemento[3]»;
    }
    else
    {
    $sql = «Insert Into nombres_separados(apellido_pat, apellido_mat, nombre) Values (‘$user0’, ‘$user1′,’$user2 $user7’)»;
    $res=mysql_query($sql);
    }

    }
    else
    {
    $user0=strtoupper($elemento[0]);
    echo «$user0»;
    $user1=strtoupper($elemento[1]);
    echo «$user1»;
    $user2=strtoupper($elemento[2]);
    echo «$user2»;

    $consulta = «select * from nombres_separados»;
    if ($elemento[2] = $consulta)
    {
    echo «Ya existe $elemento[2]»;
    }
    else
    {
    $sql = «Insert Into nombres_separados(apellido_pat, apellido_mat, nombre) Values (‘$user0’, ‘$user1′,’$user2 $user7’)»;
    $res=mysql_query($sql);
    }
    }

    Respuesta
    • el 27 enero, 2012 a las 5:51 pm
      Permalink

      ¿Existe la tabla «nombres_separados» ?

      $consulta = “select * from nombres_separados”;

      Respuesta
  • el 27 enero, 2012 a las 6:24 pm
    Permalink

    si, es la nueva tabla «nombres_separados», lo jalo de «nombres_completos» y la guardo en «nombres_separados» están en la misma base de datos.

    Como te decía creo que es en esas líneas donde está el error, porque creo que no está comparando lo que acabo de separar con el explode con lo que ya está guardado.

    Respuesta
  • el 29 febrero, 2012 a las 12:34 am
    Permalink

    Hola tengo una duda, como se le hace para llenar un combo con datos de mysql y que al seleccionar una opcion me abra otra pagina de php.

    Gracias.

    Respuesta
    • el 29 febrero, 2012 a las 8:05 am
      Permalink

      Para ello necesitas crear una pequeña función en javascript que lance la web dependiendo del contenido del combo. Para rellenar un combo (o select en html) lo único que tendrás que realizar es

      Recuerda poner el option con un bucle para que ponga todos los registros de la base de datos que quieras. Con respecto a la función del combo, si utilizas dreamweaver busca el objeto que te comento, es el combo con funcion de javascript, no tengo ahora mismo a mano el código. Si no lo encuentras me lo comentas y lo busco.

      Un saludo!

      Respuesta
  • el 29 febrero, 2012 a las 4:38 pm
    Permalink

    Gracias

    Sólo he visto para hacerlo de 2 o tres combos, yo sólo lo quiero para 1, el cual al darle click me mande a otra página.

    Si me pudieras proporcionar el código sería de gran ayuda, gracias.

    Respuesta
  • el 29 febrero, 2012 a las 5:29 pm
    Permalink

    Mira éste es el combo que me muestra los nombres, lo que quiero es que al darle click a alguno me mande a otra página.

    <?php
    $link = mysql_connect('localhost', 'root', '');
    mysql_select_db("nombres", $link);
    $res = mysql_query("select * from nombres_completos", $link);
    while ($row = mysql_fetch_array($res))
    $select .= "$row[nombre_completo]»;

    echo ‘Seleccione uno:’;
    echo »;
    echo »;
    echo ‘Elige…’.$select.»;

    ?>

    Respuesta
    • el 29 febrero, 2012 a las 10:12 pm
      Permalink

      En el otro comentario no apareció el código lo siento 🙂 necesitas poner los select dentro del bucle while
      select >
      option > $row[nombre_completo]

      Tengo que buscarte el código de los combo que salten la web, mañana te lo paso a medio día

      Un saludo!

      Respuesta
  • el 1 marzo, 2012 a las 1:03 am
    Permalink

    ok muchas gracias, como lo había puesto ya hago el combo que me jala los datos de la base de datos, lo que quiero es que al darle click me mande a otra pagina de php.

    Éste es mi código

    <?php
    $link = mysql_connect('localhost', 'root', '');
    mysql_select_db("lab", $link);
    $res = mysql_query("select * from tipo_cuestionario", $link);
    while ($row = mysql_fetch_array($res))
    $select .= "$row[1]»;

    echo ‘Seleccione un cuestionaro:’;
    echo »;
    echo ‘Elige…’.$select.»;
    ?>

    Respuesta
  • el 29 abril, 2014 a las 5:52 am
    Permalink

    Hola q pena tengo una pequeña duda tengo una variable inicial
    a=2048

    como hago para separar la cadena asi:
    b=20
    c=48

    en dos variables diferentes y guardar esto en una tabla de base de datos gracias

    Respuesta
  • Pingback: Separar o seleccionar caracteres de una cadena en PHP

  • el 20 mayo, 2015 a las 7:44 pm
    Permalink

    Muchas gracias por la información 😀

    Respuesta
  • el 20 mayo, 2015 a las 9:10 pm
    Permalink

    Hola, jee.
    Tengo una duda muy grande, no sési puedas ayudarme.

    En la tabla Grados de mi base de datos, un solo campo puede almacenar los diferentes grupos (A, B, C). Por decir:
    GRADO GRUPO
    1 A/B
    2 B/C
    3 A/C
    4 A/B/C

    Esa parte ya la tengo, mi duda es.. Ahora cómo hago una consulta desde PHP para que si, por ejemplo, quiero saber a que grados un profesor da clase al grupo C.

    Pensaba en algo como:
    SELECT grado FROM grados WHERE grupo=’C'»)
    pero no me muestra nada.

    De antemano muchas gracias 😀

    Respuesta
    • el 21 mayo, 2015 a las 10:26 am
      Permalink

      En ese caso, si en el campo de GRUPO, vas guardando A/B u otra variable de tipo string, tendrás que utilizar LIKE en la consulta SELECT por ejemplo:
      SELECT grado FROM grados WHERE grupo like «%C%»

      Prueba y nos cuentas 😉

      Respuesta
  • el 22 mayo, 2015 a las 3:40 pm
    Permalink

    Hombre, muchas gracias, me has ayudado bastante. 😀 😀 😀

    Respuesta
  • el 26 mayo, 2015 a las 4:01 pm
    Permalink

    Disculpa que te moleste de nuevo, pero ahora tengo la duda de cómo poder comparar dos campos de la BD, por ejemplo

    CAMPO1 CAMPO2
    A | B | C A

    Osea, cómo poder comparar que en campo1 se encuentre la A del campo2, me explico? :S

    De antemano muchas gracias por el apoyo. 😀

    Respuesta
  • el 26 mayo, 2015 a las 4:09 pm
    Permalink

    Entiendo que en el campo 1 o en el campo 2 hay solamente una letra? o puede ser un conjunto de varias letras?

    Si fuera en uno de ellos solo una letra, sería muy parecido a la consulta que te propuse:

    SELECT grado FROM grados WHERE grupo like “%C%”

    Con la diferencia de utilizar en vez del campo, un concat, quedaría algo así:
    SELECT grado FROM grados WHERE grupo like concat(“%»,grado,»%)

    Tendrás que buscar exactamente la función concat ya que no recuerdo exactamente la sintaxis, pero algo así será 🙂

    Respuesta
    • el 29 mayo, 2015 a las 3:35 pm
      Permalink

      Perdona que apenas pueda responder, no había tenido la oportunidad de responder el comentario, estuve buscando como usar la función de LIKE concat, pero honestamente no encontraba lo que necesita, de modo que busqué y busqué más información y encontré regexp, de modo que quedó así:

      WHERE correo_list regexp list_id

      Lo comento, por si a alguien con las mismas dudas que yo le sirve 😀

      Gracias por tu ayuda. 😀

      Respuesta
  • el 1 junio, 2015 a las 9:57 am
    Permalink

    Gracias! En verdad la función concat, no sé si era así exactamente en MySQL y juntándola con LIKE tampoco sabría como montarla, tendría que probar exactamente como montar la consulta.

    Así que gracias por dejar la solución directamente 😉
    Salud!

    Respuesta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.