web-dev-qa-db-fra.com

Éclater la chaîne d'un ou de plusieurs espaces ou tabulations

Comment puis-je exploser une chaîne par un ou plusieurs espaces ou tabulations?

Exemple: 

A      B      C      D

Je veux en faire un tableau.

124
DarthVader
$parts = preg_split('/\s+/', $str);
285
Ben James

Cela marche:

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

Je pense que vous voulez preg_split :

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

au lieu d’exploser, essayez preg_split: http://www.php.net/manual/en/function.preg-split.php

6
Brian Schroth

Afin de prendre en compte espace complet tel que

full width

vous pouvez prolonger la réponse de Bens à ceci:

$searchValues = preg_split("@[\s+ ]@u", $searchString);

Sources:

(Je n'ai pas assez de réputation pour poster un commentaire, je vous l'ai donc écrit comme réponse.)

2
MPS

Les réponses fournies par d'autres personnes (Ben James) sont très bonnes et je les ai utilisées. Comme le fait remarquer l'utilisateur 889030, 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 aborde 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;   
}
0
Peter Schaeffer