Explodir sequência por um ou mais espaços ou tabulações

141

Como posso explodir uma string por um ou mais espaços ou tabulações?

Exemplo:

A      B      C      D

Eu quero fazer disso uma matriz.

DarthVader
fonte
zero ou mais espaços implica que cada elemento terá no máximo um caractere ou que você terá infinitos elementos vazios. Tem certeza de que é isso que você quer?
24410 bdonlan
Sim, isso provavelmente deve ser "um ou mais espaços".
Michael Myers

Respostas:

322
$parts = preg_split('/\s+/', $str);
Ben James
fonte
5
O último elemento $ parts ficará em branco .. então, para removê-lo array_pop ($ parts);
user889030
1
A resposta de @lucsan deve ser a melhor resposta ( stackoverflow.com/a/38481324/1407491 ) #
68613 Nabi KAZ
6
Em vez de remover a última parte que pode estar vazia, pode-se usar:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
coeing
49

Para separar por guias:

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

Para separar por espaços / guias / novas linhas:

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

Para separar apenas por espaços:

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

AliAvci
fonte
23

Isso funciona:

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

O autor pediu explosão, para você poder usar explosão assim

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

Nota: você deve usar aspas duplas, não simples.

lucsan
fonte
Trabalhou para mim e é um pouco mais simples do que usar o poder sombrio das expressões regulares.
David 'o careca'
8
Mas ele pediu "espaços ou tabulações" e isso explode apenas para tabulações.
11118 Jeff
2
Eu vim aqui procurando espaços explodindo também. Eu me sinto profundamente triste por isso.
Sergio A.
10

Eu acho que você quer preg_split:

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

As respostas fornecidas por outras pessoas (Ben James) são muito boas e eu as usei. Como user889030 aponta, o último elemento da matriz pode estar vazio. Na verdade, o primeiro e o último elemento da matriz podem estar vazios. O código abaixo aborda os dois 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
fonte
-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
fonte
-5

@OP não importa, você pode simplesmente dividir um espaço com explodir. Até que você queira usar esses valores, itere sobre os valores explodidos e descarte os espaços em branco.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}
ghostdog74
fonte
4
E os valores delimitados por tabulações?
dotancohen
Os valores delimitados por tabulação não serão explodidos, então ugh.
NekojiruSou