ระเบิดสตริงด้วยช่องว่างหรือแท็บอย่างน้อยหนึ่งรายการ


141

ฉันจะระเบิดสตริงด้วยช่องว่างหรือแท็บอย่างน้อยหนึ่งรายการได้อย่างไร

ตัวอย่าง:

A      B      C      D

ฉันต้องการทำให้อาร์เรย์เป็นแบบนี้


การเว้นวรรคเป็นศูนย์หรือมากกว่านั้นหมายความว่าแต่ละองค์ประกอบจะมีอักขระไม่เกินหนึ่งตัวหรือว่าคุณจะมีองค์ประกอบที่ว่างเปล่าจำนวนไม่ จำกัด คุณแน่ใจหรือไม่ว่านี่คือสิ่งที่คุณต้องการ
bdonlan

ใช่นั่นน่าจะเป็น "หนึ่งหรือมากกว่าหนึ่งช่องว่าง"
Michael Myers

คำตอบ:


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

5
$ parts องค์ประกอบสุดท้ายจะว่างเปล่า .. ดังนั้นเพื่อลบ array_pop ($ parts);
user889030

1
คำตอบของ @lucsan จะต้องเป็นคำตอบที่ดีที่สุด ( stackoverflow.com/a/38481324/1407491 )
Nabi KAZ

6
แทนที่จะลบส่วนสุดท้ายซึ่งอาจว่างเปล่าสามารถใช้:$parts = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY);
coeing

49

หากต้องการคั่นด้วยแท็บ:

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

หากต้องการคั่นด้วยช่องว่าง / แท็บ / บรรทัดใหม่:

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

หากต้องการแยกช่องว่างโดยลำพัง:

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



19

ผู้เขียนขอระเบิดคุณสามารถใช้ระเบิดได้เช่นนี้

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

หมายเหตุ: คุณต้องใช้เครื่องหมายคำพูดคู่ไม่ใช่แบบเดี่ยว


ทำงานสำหรับฉันและเป็น tad ง่ายกว่าการใช้พลังมืดของการแสดงออกปกติ
ดาวิด 'ขิงหัวล้าน'

8
แต่เขาขอให้ "ช่องว่างหรือแท็บ" และสิ่งนี้จะระเบิดเฉพาะแท็บ
Jeff

2
ฉันมาที่นี่เพื่อค้นหาช่องว่างที่ระเบิดได้เช่นกัน ฉันรู้สึกเศร้าลึก ๆ เกี่ยวกับเรื่องนี้
Sergio A.



3

เพื่อที่จะบัญชีสำหรับพื้นที่เต็มความกว้างเช่น

full width

คุณสามารถขยายคำตอบให้กับ Bens:

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

แหล่งที่มา:

(ฉันมีชื่อเสียงไม่มากพอที่จะโพสต์ความคิดเห็นดังนั้นฉันจึงเขียนนี่เป็นคำตอบ)


0

คำตอบที่ได้รับจากคนอื่น ๆ (Ben James) นั้นค่อนข้างดีและฉันก็ใช้มัน ในขณะที่ผู้ใช้ 889030 ชี้ให้เห็นองค์ประกอบอาร์เรย์สุดท้ายอาจว่างเปล่า ที่จริงแล้วองค์ประกอบอาร์เรย์แรกและสุดท้ายจะว่างเปล่า รหัสด้านล่างเน้นถึงปัญหาทั้งสอง

# 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

@ มันไม่สำคัญคุณสามารถแยกพื้นที่ด้วยการระเบิด จนกว่าคุณจะต้องการใช้ค่าเหล่านั้นให้วนซ้ำค่าที่ระเบิดและยกเลิกช่องว่าง

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

4
แล้วค่าที่คั่นด้วยแท็บล่ะ
dotancohen

ค่าที่คั่นด้วยแท็บจะไม่ถูกระเบิดดังนั้นงั้น
NekojiruSou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.