Phát nổ chuỗi bởi một hoặc nhiều khoảng trắng hoặc tab


141

Làm cách nào tôi có thể phát nổ một chuỗi bằng một hoặc nhiều khoảng trắng hoặc tab?

Thí dụ:

A      B      C      D

Tôi muốn làm cho điều này một mảng.


không hoặc nhiều khoảng trắng ngụ ý rằng mỗi phần tử sẽ có nhiều nhất một ký tự hoặc bạn sẽ có vô số phần tử trống. Bạn có chắc chắn đây là những gì bạn muốn?
bdonlan

Vâng, đó có lẽ nên là "một hoặc nhiều khoảng trắng".
Michael Myers

Câu trả lời:


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

5
$ phần tử phần tử cuối cùng sẽ trống .. vì vậy để loại bỏ nó Array_pop ($ phần);
dùng889030

1
Câu trả lời của @lucsan phải là câu trả lời hay nhất ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ

6
Thay vì loại bỏ phần cuối cùng có thể trống, người ta có thể sử dụng:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
chạy

49

Để phân tách bằng các tab:

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

Để phân tách bằng dấu cách / tab / dòng mới:

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

Để ngăn cách bởi không gian một mình:

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


23

Những công việc này:

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

19

Tác giả đã yêu cầu phát nổ, để bạn có thể sử dụng phát nổ như thế này

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

Lưu ý: bạn phải sử dụng báo giá kép, không đơn lẻ.


Làm việc cho tôi và đơn giản hơn so với việc sử dụng sức mạnh đen tối của các biểu thức thông thường.
David 'gừng hói'

8
Nhưng anh ấy đã yêu cầu "khoảng trắng hoặc tab" và điều này chỉ bùng nổ cho các tab.
Jeff

2
Tôi đến đây để tìm kiếm không gian bùng nổ quá. Tôi cảm thấy buồn sâu bên trong về điều này.
Sergio A.



3

Để chiếm không gian chiều rộng đầy đủ, chẳng hạn như

full width

bạn có thể mở rộng câu trả lời của Bens cho điều này:

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

Nguồn:

(Tôi không có đủ danh tiếng để đăng bình luận, vì vậy tôi đã viết bài này như một câu trả lời.)


0

Các câu trả lời được cung cấp bởi những người khác (Ben James) là khá tốt và tôi đã sử dụng chúng. Như user889030 chỉ ra, phần tử mảng cuối cùng có thể trống. Trên thực tế, các phần tử mảng đầu tiên và cuối cùng có thể trống. Mã dưới đây giải quyết cả hai vấn đề.

# 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 không thành vấn đề, bạn chỉ có thể tách ra trên một không gian có tiếng nổ. Cho đến khi bạn muốn sử dụng các giá trị đó, lặp lại các giá trị đã nổ và loại bỏ các khoảng trống.

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

4
Điều gì về các giá trị được phân định bằng tab?
dotancohen

Các giá trị được phân định bằng tab sẽ không bị phát nổ, vì vậy ugh.
NekojiruSou
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.