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.


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:



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);


23

Isso funciona:

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

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.


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);



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;   
}

-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);
    ?>


-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";
    }
}

4
E os valores delimitados por tabulações?
dotancohen

Os valores delimitados por tabulação não serão explodidos, então ugh.
NekojiruSou
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.