PHP: Transformar un arreglo a un string separado por comas

Si deseas separar un arreglo en una cadena que tenga sus elementos separados con algun separador puedes usar la siguiente funcion que pongo a continuacion; la cual espera como entrada un arreglo y un caracter separador.

El codigo

function arrayAString($miArray,$sep) {
	echo implode($sep,$miArray);
}

	//Ejemplo
	$elArreglo = array('Carlos','Daniel','Xavier','Gonzalo','Karla');	
	echo arrayAString($elArreglo,',');
	//Salida: Carlos,Daniel,Xavier,Gonzalo,Karla

Como ves básicamente he renombrado a la función implode de PHP (no confundir con explode que hace lo contrario). ¿Facíl no?

 

Deja tu comentario si tienes alguna duda. Que estés bien, te mando saludos cordiales.
 
 
Enlaces relacionados:
 
 

PHP: Convertir cadena con separadores a Array

Si tienes una cadena separada con espacios, comas o cualquier otro separador es fácil convertirla en un array con la función explode de PHP.

El codigo

// Ejemplo 1
$miCadena  = "piece1 piece2 piece3 piece4 piece5 piece6";
$piezas = explode(" ", $miCadena);
/*
Resultado:
Array   piezas
( 
[0] piece1
[1] piece2
[2] piece3
[3] piece4
[4] piece5
[5] piece6
*/
…Por el contrario si los elementos de la cadena son pocos y deseas ponerlos en una variable a cada uno:
// Ejemplo 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user."<br/>";
echo $pass."<br/>"; 
echo $uid."<br/>";
echo $gid."<br/>";
// ..etc
/*
Resultado:
foo
*
1023
1000
*/

// Ejemplo 3 (separar dia, mes y año de la fecha actual)
list($dia,$mes,$anio) = explode('/',date('d/m/Y') );
echo $dia."<br/>";
echo $mes."<br/>";
echo $anio."<br/>";
La funcion explode devuelve un array y sus elementos son asignados a una lista de variables con ayuda de la funcion list de php.

 

Si te gusto el código expuesto o tienes alguna critica constructiva, déjame un comentario. Saludos cordiales.
 
 
Enlaces relacionados:
 
 

Validar numero decimal en java

Ha veces es necesario validar si una cadena es decimal o no, por ejemplo cuando el usuario de un programa debe introducir un precio, o el peso de un producto, etc.  El metodo que muestro a continuacion valida si una cadena que le llega es un numero decimal devolviendo true en caso de que si y false en caso de que no.


//Devuelve true si la cadena que llega es un numero decimal, false en caso contrario
 public boolean esDecimal(String cad)
 {
 try
 {
   Double.parseDouble(cad);
   return true;
 }
 catch(NumberFormatException nfe)
 {
   return false;
 }
 }

Basicamente lo que hace este metodo es  intentar convertir la cadena que llega a Decimal con el metodo parseDouble() de la clase Double (este metodo devuelve un dato de tipo double de la cadena que se le pasa como argumento) , si la conversion se puede realiza entonces el metodo devuelve true indicando que si es un numero decimal; por el contrario  si la cadena que se intenta convertir a decimal no tiene la sintaxis correcta de un numero decimal, es decir,  esta linea:

Double.parseDouble(cad);

lanza un excepcion del tipo NumberFormatException,  entonces el metodo se va al catch y devuelve false para indicar que no es un numero decimal. Por otro lado podemos ver que incluso si a la cadena  le llega un entero, por ejemplo:  «544» el metodo devuelve true ( metodo parseDouble devolveria 544.0) , si nos ponemos estrictos podemos ver que 544 no es un numero decimal, ES UN NUMERO ENTERO.  Entonces podemos ver que el metodo realmente lo que hace es verificar si la cadena se puede convertir a decimal, por lo tanto se deberia llamar algo asi como: esConvertibleADecimal(). Otra forma de comprobar si la cadena es un decimal es analizar caracter por caracter para detectar todos los casos en que la cadena pudiera tener un error de sintaxis. El metodo que muestro a continuacion realmente es la implementacion de un automata:


/*
 Descripcion:
 Contiene un metodo que Valida si una cadena es un numero decimal. Se da por hecho que a la
 cadena se le han eliminado posibles espacios al principio y al final
 Author: gonzasilve@gmail.com
 Fecha:  08/12/2009
 archivo CadenaDecimal.java
*/

public class CadenaDecimal
{
 //Devuelve true si la cadena que llega tiene la sintaxis de un decimal
 public boolean esDecimal(String cad)
 {
 boolean hayPunto=false;
 StringBuffer parteEntera = new StringBuffer();
 StringBuffer parteDecimal = new StringBuffer();
 int i=0, posicionDelPunto;

 for( i=0;i<cad.length(); i++ )
 if ( cad.charAt(i) == '.')                          //Detectar si hay un punto decimal en la cadena
 hayPunto=true;
 if(hayPunto)                                            //Si hay punto guardar la posicion donde se encuentra el carater punto
 posicionDelPunto=cad.indexOf('.');                  //(si la cadena tiene varios puntos, detecta donde esta el primero).
 else
 return false;                                       //Si no hay punto; no es decimal

 if( posicionDelPunto == cad.length()-1 || posicionDelPunto== 0)    //Si el punto esta al final o al principio no es un decimal
 return false;

 for( i=0;i<posicionDelPunto; i++ )
 parteEntera.append(cad.charAt(i)) ;                 //Guardar la parte entera en una variable

 for(i = 0; i<parteEntera.length(); i++)
 if( ! Character.isDigit(parteEntera.charAt(i)) )    //Si alguno de los caracteres de la parte entera no son digitos no es decimal
 return false;

 for( i=posicionDelPunto+1;i<cad.length(); i++ )
 parteDecimal.append(cad.charAt(i));                 //Guardar la parte decimal en una variable

 for(i = 0; i<parteDecimal.length(); i++)
 if( ! Character.isDigit(parteDecimal.charAt(i)) )   //Si alguno de los caracteres de la parte decimal no es un digito no es decimal
 return false;                                   //Incluye el caso en el que la cadena tenga dos o mas puntos

 return true;                                            //Si paso todas las pruebas anteriores, la cadena es un Numero decimal
 }

    public static void main(String args[])
    {
      CadenaDecimal prueba1 = new CadenaDecimal();
      //Devuelve true
      System.out.println("Cadena \"324.40\" es decimal: "+prueba1.esDecimal("324.40"));
      //Devuelve false
      System.out.println("Cadena \"324.6a\" es decimal: "+prueba1.esDecimal("324.6a"));
      //Devuelve false
      System.out.println("Cadena \"3a4.00\" es decimal: "+prueba1.esDecimal("3a4.00"));
      //Devuelve false
      System.out.println("Cadena \"3a4\" es decimal: "+prueba1.esDecimal("3a4"));
      //Devuelve false, es un entero
      System.out.println("Cadena \"656\" es decimal: "+prueba1.esDecimal("656"));
    }
}

Este metodo es mas estricto y no acepta el «544», devuelve false pues 544 no es un decimal, ES UN ENTERO. A continuacion muestro una imagen de la compilacion y ejecucion de este metodo:

A continuacion explico un poco el codigo, esta parte:

 for( i=0;i<cad.length(); i++ )
 if ( cad.charAt(i) == '.')                          //Detectar si hay un punto decimal en la cadena
 hayPunto=true;

Detecta si hay un punto dentro de la cadena, las cadenas «23.213» , «4g21.12», «.232» , «dwe.23», «434.» , «465..2ew», «.45dsd34», «87.232…» pondrian la variable hayPunto en true, pues todas estas cadenas tienen un punto.

despues el siguiente codigo:

 if(hayPunto)                                            //Si hay punto guardar la posicion donde se encuentra el carater punto
 posicionDelPunto=cad.indexOf('.');                  //(si la cadena tiene varios puntos, detecta donde esta el primero).
 else
 return false;                                       //Si no hay punto; no es decimal

verifica si hay un punto se recoge la posicion (el indice) en donde esta esta ese punto dentro de la cadena. Si no hay punto entonces se devuelve false para indicar que la cadena no es un decimal, pues todos los numeros decimales tienen un punto decimal ¿ o no?.

despues el siguiente codigo:

 if( posicionDelPunto == cad.length()-1 || posicionDelPunto== 0)    //Si el punto esta al final o al principio no es un decimal
 return false;

verifica si el punto esta al final o (||) si el punto esta al principio devuelve false, pues los numeros decimales no tiene el punto decimal al principio, en este caso somos muy estrictos y no se aceptan cadenas como «.547» (lleva implicito un cero como parte entera), el metodo devolveria false, por que no se acepta que el usuario piense que el sistema le va a colocar el cero como parte entera. Todo lo demas ya esta explicado en el codigo, asi que ya no lo explico mucho.

Lo siguiente es comprobar si la parte entera (los caracteres que estan antes del punto) todos son digitos enteros, si alguno no lo es entonces devolver false para indicar que no es un decimal, «67sa5.76» no es un decimal ¿o si?.

 for( i=0;i<posicionDelPunto; i++ )
 parteEntera.append(cad.charAt(i)) ;                 //Guardar la parte entera en una variable

 for(i = 0; i<parteEntera.length(); i++)
 if( ! Character.isDigit(parteEntera.charAt(i)) )    //Si alguno de los caracteres de la parte entera no son digitos no es decimal
 return false;

El codigo anterior es el mismo que se uso en la implementacion del metodo para validar numero entero.

Lo siguiente es comprobar si la parte decimal (los caracteres que estan despues del punto) todos son digitos enteros, si alguno no lo es entonces devolver false para indicar que no es un decimal, «6757.8766», «6757..8766» no son decimales ¿o si?.


 for( i=posicionDelPunto+1;i<cad.length(); i++ )
 parteDecimal.append(cad.charAt(i));                 //Guardar la parte decimal en una variable

 for(i = 0; i<parteDecimal.length(); i++)
 if( ! Character.isDigit(parteDecimal.charAt(i)) )   //Si alguno de los caracteres de la parte decimal no es un digito no es decimal
 return false;                                   //Incluye el caso en el que la cadena tenga dos o mas puntos

por ultimo se devuelve un true si la cadena pudo pasar por toda las serie de pruebas anteriores. SI las paso es por que la cadena tiene toda la sintaxis de un numero decimal correctamente escrito.

 return true;        //Si paso todas las pruebas anteriores, la cadena es un Numero decimal

… hasta pronto.
}

Validar cadena vacia en java

Ha veces es necesario comprobar si una cadena que introduce el usuario es una cadena vacia (o simplemente no escribio nada). Por ejemplo cuando se le solicita al usuario su nombre en un JTextField y el usuario no quiere escribirlo y simplemente escribe uno o varios espacios para intentar engañar al sistema y presiona <enter> o el boton de procesar.

El metodo Java que muestro a continuacion espera recibir una cadena y devuelve true si todos los caracteres son espacio.


/*
 Descripcion:
 Contiene un metodo que Valida si una cadena todos son espacios.
 author: gonzasilve@gmail.com
 fecha:  06/12/2009
 archivo Cadenaespacios.java
*/

public class CadenaEspacios
{
 //Devuelve true si en una cadena que llega todos son espacios, false en caso contrario
 public boolean sonEspacios(String cad)
 {
 for(int i =0; i<cad.length(); i++)
 if(cad.charAt(i) != ' ')
 return false;

 return true;
 }

 public static void main(String args[])
 {
 CadenaEspacios cadena1 = new CadenaEspacios();
 //Devuelve true
 System.out.println("Cadena \"       \" Son espacios: " + cadena1.sonEspacios("        "));
 //Devuelve false
 System.out.println("Cadena \" hola7   \" Son espacios: " + cadena1.sonEspacios(" hola7   "));
 //Devuelve false
 System.out.println("Cadena \"756   \" Son espacios: " + cadena1.sonEspacios("756   "));
 }
}

Como se puede ver el metodo simplemente toma caracter por caracter y lo compara si no es igual al caracter ‘ ‘ (espacio) si  alguno no es espacio (se cumple la condicion if) devuelve false; lo que significa  que en la cadena NO todos los caracteres son espacios. Si el if no se cumple ninguna vez, se ejecuta la instruccion return true; lo que significa que todos los caracteres de la cadena son espacios.

A continuacion muestro una imagen de la compilacion y ejecucion de la prueba de este metodo en mi S.O. Ubuntu.

Algunos pueden pensar que es mas facil escribir un codigo como:


if( cadena.equals(" ") )

Pero en ese caso se esta comparando toda la cadena con un solo espacio, pero eso va a devolver true solo si la cadena tiene un solo espacio, pero (otro pero mas) ¿y si la cadena son varios espacios?, en ese caso el if anterior no se cumpliria (un espacio es diferente de varios espacios).

bueno por otra parte debo decir que el if del metodo SonEspacios() , este if:


 if(cad.charAt(i) != ' ')

se puede reemplazar por este otro:


 if( ! Character.isWhiteSpace( cad.charAt(i) ) )

Espero que alguien le sirva esta cosa, me despido, hasta pronto.

}


if( cadena.equals(" ") )