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.


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

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


23

Ini bekerja:

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

19

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

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

Catatan: Anda harus menggunakan penawaran ganda, bukan tunggal.


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



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

-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

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

4
Bagaimana dengan nilai batas-tab?
dotancohen

Nilai batas-tab tidak akan meledak, jadi ugh.
NekojiruSou
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.