Meledakkan string dengan satu spasi atau lebih tab

141

Bagaimana saya bisa meledakkan string oleh satu atau beberapa spasi atau tab?

Contoh:

A      B      C      D

Saya ingin membuat ini menjadi array.

DarthVader
sumber
nol atau lebih banyak ruang menyiratkan bahwa setiap elemen akan memiliki paling banyak satu karakter, atau bahwa Anda akan memiliki banyak elemen kosong yang tak terhingga. Apakah Anda yakin ini yang Anda inginkan?
bdonlan
Ya, itu mungkin harus "satu atau lebih spasi".
Michael Myers

Jawaban:

322
$parts = preg_split('/\s+/', $str);
Ben James
sumber
5
$ bagian elemen terakhir akan kosong .. jadi untuk menghapusnya array_pop ($ bagian);
user889030
1
Jawaban @lucsan harus menjadi jawaban terbaik ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ
6
Alih-alih menghapus bagian terakhir yang mungkin kosong, orang dapat menggunakan:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
coeing
49

Untuk dipisahkan oleh tab:

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

Untuk dipisahkan oleh spasi / tab / baris baru:

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

Untuk memisahkan dengan spasi saja:

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

AliAvci
sumber
23

Ini bekerja:

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

Penulis meminta explode, untuk itu Anda bisa menggunakan explode seperti ini

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

Catatan: Anda harus menggunakan penawaran ganda, bukan tunggal.

lucsan
sumber
Bekerja untuk saya dan sedikit lebih sederhana daripada menggunakan kekuatan gelap ekspresi reguler.
David 'the botak jahe'
8
Tapi dia meminta "spasi atau tab" dan ini hanya akan meledak untuk tab.
Jeff
2
Saya datang ke sini untuk mencari ruang meledak juga. Saya merasa sedih jauh di dalam hati tentang hal ini.
Sergio A.
10

Saya pikir Anda ingin preg_split:

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

Jawaban yang diberikan oleh orang lain (Ben James) cukup bagus dan saya telah menggunakannya. Seperti yang ditunjukkan oleh user889030, elemen array terakhir mungkin kosong. Sebenarnya, elemen array pertama dan terakhir bisa kosong. Kode di bawah ini membahas kedua masalah tersebut.

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

@ TINGGAL itu tidak masalah, Anda bisa membelah ruang dengan meledak. Sampai Anda ingin menggunakan nilai-nilai itu, beralihlah ke nilai yang meledak dan buang yang kosong.

$str = "A      B      C      D";
$s = explode(" ",$str);
foreach ($s as $a=>$b){    
    if ( trim($b) ) {
     print "using $b\n";
    }
}
ghostdog74
sumber
4
Bagaimana dengan nilai batas-tab?
dotancohen
Nilai batas-tab tidak akan meledak, jadi ugh.
NekojiruSou