Rozbij ciąg o co najmniej jedną spację lub tabulator

141

Jak mogę rozbić ciąg o jedną lub więcej spacji lub tabulatorów?

Przykład:

A      B      C      D

Chcę zrobić z tego tablicę.

DarthVader
źródło
zero lub więcej spacji oznacza, że ​​albo każdy element będzie miał co najwyżej jeden znak, albo będziesz mieć nieskończenie wiele pustych elementów. Czy na pewno tego chcesz?
bdonlan
Tak, prawdopodobnie powinno to być „jedna lub więcej spacji”.
Michael Myers

Odpowiedzi:

323
$parts = preg_split('/\s+/', $str);
Ben James
źródło
5
$ parts ostatni element będzie pusty .. więc aby go usunąć array_pop ($ parts);
user889030,
1
Odpowiedź @lucsan musi być najlepszą odpowiedzią ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ
6
Zamiast usuwać ostatnią część, która może być pusta, można użyć:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
coeing
49

Aby oddzielić zakładkami:

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

Aby oddzielić spacjami / tabulatorami / znakami nowej linii:

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

Aby oddzielić tylko spacjami:

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

AliAvci
źródło
23

To działa:

$string = 'A   B C          D';
$arr = preg_split('/[\s]+/', $string);
schneck
źródło
19

Autor poprosił o eksplozję, abyś mógł użyć takiego wybuchu

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

Uwaga: musisz użyć podwójnego cudzysłowu, a nie pojedynczego.

lucsan
źródło
U mnie zadziałało i jest odrobinę prostsze niż używanie mrocznej mocy wyrażeń regularnych.
David „łysy rudy”
8
Ale poprosił o „spacje lub tabulatory”, a to eksploduje tylko w przypadku tabulatorów.
Jeff,
2
Przyjechałem tutaj, szukając eksplodujących przestrzeni. Czuję się z tego powodu smutny.
Sergio A.
10

Myślę, że chcesz preg_split:

$input = "A  B C   D";
$words = preg_split('/\s+/', $input);
var_dump($words);
jheddings
źródło
0

Odpowiedzi udzielone przez innych ludzi (Ben James) są całkiem dobre i korzystałem z nich. Jak wskazuje user889030, ostatni element tablicy może być pusty. W rzeczywistości pierwszy i ostatni element tablicy mogą być puste. Poniższy kod rozwiązuje oba problemy.

# 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
źródło
-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
źródło
-5

@OP, to nie ma znaczenia, możesz po prostu podzielić przestrzeń za pomocą wybuchu. Dopóki nie zechcesz użyć tych wartości, iteruj po rozstrzelonych wartościach i odrzucaj puste miejsca.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}
ghostdog74
źródło
4
A co z wartościami rozdzielanymi tabulatorami?
dotancohen,
Wartości rozdzielane tabulatorami nie zostaną rozbite, więc ugh.
NekojiruSou