Esplodi la stringa di uno o più spazi o schede


141

Come posso esplodere una stringa di uno o più spazi o schede?

Esempio:

A      B      C      D

Voglio renderlo un array.


zero o più spazi implica che ogni elemento avrà al massimo un carattere o che avrai infinitamente molti elementi vuoti. Sei sicuro che sia quello che vuoi?
bdonlan,

Sì, probabilmente dovrebbe essere "uno o più spazi".
Michael Myers

Risposte:


323
$parts = preg_split('/\s+/', $str);

5
L'ultimo elemento $ parts sarà vuoto .. quindi per rimuoverlo array_pop ($ parts);
user889030

1
La risposta di @lucsan deve essere la risposta migliore ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ

6
Invece di rimuovere l'ultima parte che può essere vuota, si può usare:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
Coeing

49

Per separare per schede:

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

Per separare per spazi / tab / newline:

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

Per separare solo dagli spazi:

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


23

Questo funziona:

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

19

L'autore ha chiesto di esplodere, a te puoi usare esplodere in questo modo

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

Nota: è necessario utilizzare la doppia virgoletta, non singola.


Ha funzionato per me ed è un po 'più semplice rispetto all'utilizzo del potere oscuro delle espressioni regolari.
David "lo zenzero calvo",

8
Ma ha chiesto "spazi o schede" e questo esplode solo per le schede.
Jeff

2
Sono venuto qui in cerca di spazi esplosivi. Mi sento triste nel profondo di questo.
Sergio A.

10

Penso che tu voglia preg_split :

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



0

Le risposte fornite da altre persone (Ben James) sono abbastanza buone e le ho usate. Come sottolineato dall'utente889030, l'ultimo elemento dell'array potrebbe essere vuoto. In realtà, il primo e l'ultimo elemento dell'array possono essere vuoti. Il codice seguente risolve entrambi i problemi.

# 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 non importa, puoi semplicemente dividerlo su uno spazio con esplodere. Fino a quando non si desidera utilizzare tali valori, scorrere i valori esplosi e eliminare gli spazi vuoti.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}

4
Che dire dei valori delimitati da tabulazioni?
dotancohen,

I valori delimitati da tabulazione non verranno esplosi, quindi ugh.
NekojiruSou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.