Hola,
El problema es que si tienes mas de un espacio seguido en medio de la cadena, el implode() te crea un elemento vacio. Por ejemplo, si haces:
Código PHP:
$p=explode(' ',"hola holita hola");
var_dump($p);
te muestra
array(6) { [0]=> string(4) "hola" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(6) "holita" [4]=> string(0) "" [5]=> string(4) "hola" }
Es decir, 2 espacios seguidos los toma como espacio{vacio}espacio.
La solucion por expresiones regulares seria usar el modificador de "uno o mas caracteres". Si no me equivoco, para uno o mas espacios seguidos es [[:space:]]+
Código PHP:
$p=split('[[:space:]]+',"hola holita hola");
var_dump($p);
muestra
array(3) { [0]=> string(4) "hola" [1]=> string(6) "holita" [2]=> string(4) "hola" }
Usar el trim ayuda eliminando los espacios del comienzo y del final, porque parece que los espacios iniciales y finales los toma como {vacio}espacio y espacio{vacio}, creando un elemento para {vacio}.
Saludos.