Exploser la chaîne d'un ou plusieurs espaces ou tabulations

141

Comment puis-je décomposer une chaîne d'un ou plusieurs espaces ou tabulations?

Exemple:

A      B      C      D

Je veux en faire un tableau.

Dark Vador
la source
zéro ou plusieurs espaces implique que soit chaque élément aura au plus un caractère, soit que vous aurez une infinité d'éléments vides. Etes-vous sûr que c'est ce que vous voulez?
bdonlan
Ouais, cela devrait probablement être "un ou plusieurs espaces".
Michael Myers

Réponses:

323
$parts = preg_split('/\s+/', $str);
Ben James
la source
5
Le dernier élément de $ parts sera vide .. donc pour le supprimer array_pop ($ parts);
user889030
1
La réponse de @lucsan doit être la meilleure réponse ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ
6
Au lieu de retirer la dernière partie qui peut être vide, on peut utiliser:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
coeing
49

Pour séparer par onglets:

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

Pour séparer par espaces / tabulations / retours à la ligne:

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

Pour séparer par des espaces seuls:

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

AliAvci
la source
23

Cela marche:

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

L'auteur a demandé d'exploser, vous pouvez utiliser exploser comme ça

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

Remarque: vous devez utiliser des guillemets doubles, pas des guillemets simples.

Lucsan
la source
Cela a fonctionné pour moi et c'est un peu plus simple que d'utiliser le pouvoir sombre des expressions régulières.
David 'the chauve gingembre'
8
Mais il a demandé "des espaces ou des tabulations" et cela n'explose que pour les onglets.
Jeff
2
Je suis venu ici à la recherche d'espaces qui explosent aussi. Je me sens profondément triste à ce sujet.
Sergio A.
10

Je pense que tu veux preg_split:

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

Les réponses fournies par d'autres personnes (Ben James) sont assez bonnes et je les ai utilisées. Comme le souligne user889030, le dernier élément du tableau peut être vide. En fait, les premier et dernier éléments du tableau peuvent être vides. Le code ci-dessous résout les deux problèmes.

# 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
la source
-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
la source
-5

@OP peu importe, vous pouvez simplement vous diviser sur un espace avec exploser. Jusqu'à ce que vous souhaitiez utiliser ces valeurs, parcourez les valeurs éclatées et supprimez les blancs.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}
ghostdog74
la source
4
Qu'en est-il des valeurs délimitées par des tabulations?
dotancohen
Les valeurs délimitées par des tabulations ne seront pas explosées, donc pouah.
NekojiruSou