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.


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

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


23

Cela marche:

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

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.


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.




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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.