Explodieren Sie die Zeichenfolge durch ein oder mehrere Leerzeichen oder Tabulatoren

141

Wie kann ich eine Zeichenfolge durch ein oder mehrere Leerzeichen oder Tabulatoren auflösen?

Beispiel:

A      B      C      D

Ich möchte dies zu einem Array machen.

Darth Vader
quelle
Null oder mehr Leerzeichen bedeuten, dass entweder jedes Element höchstens ein Zeichen enthält oder dass Sie unendlich viele leere Elemente haben. Bist du sicher, dass du das willst?
Bdonlan
Ja, das sollte wahrscheinlich "ein oder mehrere Leerzeichen" sein.
Michael Myers

Antworten:

322
$parts = preg_split('/\s+/', $str);
Ben James
quelle
5
$ parts last element ist leer. um es zu entfernen array_pop ($ parts);
user889030
1
Die Antwort von @lucsan muss die beste Antwort sein ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ
6
Anstatt den letzten Teil zu entfernen, der möglicherweise leer ist, kann man $parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
Folgendes
49

So trennen Sie nach Registerkarten:

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

So trennen Sie durch Leerzeichen / Tabulatoren / Zeilenumbrüche:

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

Nur durch Leerzeichen trennen:

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

AliAvci
quelle
23

Das funktioniert:

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

Der Autor hat nach Explosion gefragt, damit Sie Explosion so verwenden können

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

Hinweis: Sie müssen ein doppeltes Anführungszeichen verwenden, kein einfaches.

lucsan
quelle
Hat für mich funktioniert und ist ein bisschen einfacher als die dunkle Kraft regulärer Ausdrücke zu nutzen.
David 'der kahle Ingwer'
8
Aber er fragte nach "Leerzeichen oder Tabulatoren" und dies explodiert nur für Tabulatoren.
Jeff
2
Ich bin hierher gekommen, um nach explodierenden Räumen zu suchen. Ich bin tief im Inneren traurig darüber.
Sergio A.
10

Ich denke du willst preg_split:

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

Die Antworten anderer Leute (Ben James) sind ziemlich gut und ich habe sie verwendet. Wie user889030 hervorhebt, ist das letzte Array-Element möglicherweise leer. Tatsächlich können das erste und das letzte Array-Element leer sein. Der folgende Code behebt beide Probleme.

# 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
quelle
-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
quelle
-5

@OP es spielt keine Rolle, Sie können einfach auf ein Feld mit Explosion teilen. Bis Sie diese Werte verwenden möchten, durchlaufen Sie die explodierten Werte und verwerfen Sie Leerzeichen.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}
Ghostdog74
quelle
4
Was ist mit tabulatorgetrennten Werten?
Dotancohen
Durch Tabulatoren getrennte Werte werden nicht explodiert.
NekojiruSou