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!
Muy bueno, muchas gracias.
A tí por darlas 🙂
Un saludo!
¿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
$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!
De lujo, quedó perfectamente. Gracias.
De nada 🙂
Aquí estamos para lo que necesites!
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.»‘)»;
?>
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(«»);
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.
Tendrás que hacer
$cadena = «1-0-0»
$tutorial = explode(‘-‘,$cadena);
Con ese código debe de funcionarte.
Un saludo!
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);
}
}
¿Existe la tabla «nombres_separados» ?
$consulta = “select * from nombres_separados”;
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.
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.
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!
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.
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.»;
?>
En el otro comentario no apareció el código lo siento 🙂 necesitas poner los select dentro del bucle while
select >
option > $row[nombre_completo] option / Select >
Tengo que buscarte el código de los combo que salten la web, mañana te lo paso a medio día
Un saludo!
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.»;
?>
te dejo aquí la función
http://www.vertutoriales.com/index.php/crear-un-select-combo-que-envie-a-otra-pagina/
Un saludo!
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
Buenas David
Para separar una cadena necesitas otra función ya que vas a realizar el corte solo con número de caracteres, te dejo el enlace donde puedes verlo
http://vertutoriales.com/separar-o-seleccionar-caracteres-de-una-cadena-en-php/
Espero que te sirva, lo he escrito para dar respuesta a tu consulta 😉
Un saludo!
Pingback: Separar o seleccionar caracteres de una cadena en PHP
Muchas gracias Amigoo
nada :D, es sencillo PHP 🙂
Muchas gracias por la información 😀
Nada 🙂
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 😀
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 😉
Hombre, muchas gracias, me has ayudado bastante. 😀 😀 😀
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. 😀
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á 🙂
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. 😀
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!