Explotar cadena por uno o más espacios o pestañas

141

¿Cómo puedo explotar una cadena con uno o más espacios o pestañas?

Ejemplo:

A      B      C      D

Quiero hacer de esto una matriz.

Darth Vader
fuente
cero o más espacios implica que cada elemento tendrá como máximo un carácter, o que tendrá infinitos elementos vacíos. ¿Estás seguro de que esto es lo que quieres?
bdonlan
Sí, eso probablemente debería ser "uno o más espacios".
Michael Myers

Respuestas:

322
$parts = preg_split('/\s+/', $str);
Ben James
fuente
55
El último elemento de $ parts estará en blanco ... para eliminarlo array_pop ($ parts);
user889030
1
La respuesta de @lucsan debe ser la mejor respuesta ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ
66
En lugar de eliminar la última parte que puede estar vacía, se puede usar:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
coeing
49

Para separar por pestañas:

$comp = preg_split("/[\t]/", $var);

Para separar por espacios / pestañas / líneas nuevas:

$comp = preg_split('/\s+/', $var);

Para separar por espacios solo:

$comp = preg_split('/ +/', $var);

AliAvci
fuente
23

Esto funciona:

$string = 'A   B C          D';
$arr = preg_split('/[\s]+/', $string);
Schneck
fuente
19

El autor pidió explotar, para que pueda utilizar explotar de esta manera

$resultArray = explode("\t", $inputString);

Nota: debe usar comillas dobles, no simples.

lucsan
fuente
Funcionó para mí y es un poco más simple que usar el poder oscuro de las expresiones regulares.
David 'el jengibre calvo'
8
Pero pidió "espacios o pestañas" y esto solo explota para las pestañas.
Jeff
2
Vine aquí buscando espacios explosivos también. Me siento muy triste por esto.
Sergio A.
10

Creo que quieres preg_split:

$input = "A  B C   D";
$words = preg_split('/\s+/', $input);
var_dump($words);
jheddings
fuente
0

Las respuestas proporcionadas por otras personas (Ben James) son bastante buenas y las he usado. Como señala user889030, el último elemento de matriz puede estar vacío. En realidad, el primer y el último elemento de la matriz pueden estar vacíos. El siguiente código aborda ambos problemas.

# Split an input string into an array of substrings using any set
# whitespace characters
function explode_whitespace($str) {  
  # Split the input string into an array
  $parts = preg_split('/\s+/', $str);
  # Get the size of the array of substrings
  $sizeParts = sizeof($parts);
  # Check if the last element of the array is a zero-length string
  if ($sizeParts > 0) {
    $lastPart = $parts[$sizeParts-1];
    if ($lastPart == '') {
      array_pop($parts);
      $sizeParts--;
    }
    # Check if the first element of the array is a zero-length string
    if ($sizeParts > 0) {
      $firstPart = $parts[0];
      if ($firstPart == '') 
        array_shift($parts); 
    }
  }
  return $parts;   
}
Peter Schaeffer
fuente
-2
Explode string by one or more spaces or tabs in php example as follow: 

   <?php 
       $str = "test1 test2   test3        test4"; 
       $result = preg_split('/[\s]+/', $str);
       var_dump($result);  
    ?>

   /** To seperate by spaces alone: **/
    <?php
      $string = "p q r s t";   
      $res = preg_split('/ +/', $string);
      var_dump($res);
    ?>

Trimbak Gopalghare
fuente
-5

@OP no importa, solo puedes dividir en un espacio con explotar. Hasta que desee utilizar esos valores, repita los valores explotados y descarte los espacios en blanco.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}
ghostdog74
fuente
44
¿Qué pasa con los valores delimitados por tabulaciones?
dotancohen
Los valores delimitados por tabulaciones no se explotarán, así que ugh.
NekojiruSou