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!

Te puede interesar:

23 Comments

  • Tipooo commented on 5 mayo, 2010 Reply

    Muy bueno, muchas gracias.

  • lalo carsi commented on 26 diciembre, 2011 Reply

    ¿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

    • VideoTutoriales commented on 27 diciembre, 2011 Reply

      $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!

  • lalo carsi commented on 27 diciembre, 2011 Reply

    De lujo, quedó perfectamente. Gracias.

    • VideoTutoriales commented on 28 diciembre, 2011 Reply

      De nada :)

      Aquí estamos para lo que necesites!

  • lalo carsi commented on 28 diciembre, 2011 Reply

    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.”‘)”;

    ?>

    • VideoTutoriales commented on 28 diciembre, 2011 Reply

      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(“”);

  • jagavi commented on 9 enero, 2012 Reply

    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.

    • VideoTutoriales commented on 9 enero, 2012 Reply

      Tendrás que hacer
      $cadena = “1-0-0″
      $tutorial = explode(‘-’,$cadena);

      Con ese código debe de funcionarte.

      Un saludo!

  • lalo commented on 27 enero, 2012 Reply

    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);
    }
    }

    • VideoTutoriales commented on 27 enero, 2012 Reply

      ¿Existe la tabla “nombres_separados” ?

      $consulta = “select * from nombres_separados”;

  • lalo commented on 27 enero, 2012 Reply

    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.

  • lalo commented on 29 febrero, 2012 Reply

    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.

    • VideoTutoriales commented on 29 febrero, 2012 Reply

      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!

  • lalo commented on 29 febrero, 2012 Reply

    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.

  • lalo commented on 29 febrero, 2012 Reply

    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.”;

    ?>

    • VideoTutoriales commented on 29 febrero, 2012 Reply

      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!

  • lalo commented on 1 marzo, 2012 Reply

    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.”;
    ?>

  • David commented on 29 abril, 2014 Reply

    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

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>