Multiple explode characters with comma and - (hyphen)

29,860

Solution 1

Explode can't do that. There is a nice function called preg_split for that. Do it like this:

$keywords = preg_split("/[\s,-]+/", "This-sign, is why we can't have nice things");
var_dump($keywords);

This outputs:

  array
  0 => string 'This' (length=4)
  1 => string 'sign' (length=4)
  2 => string 'is' (length=2)
  3 => string 'why' (length=3)
  4 => string 'we' (length=2)
  5 => string 'can't' (length=5)
  6 => string 'have' (length=4)
  7 => string 'nice' (length=4)
  8 => string 'things' (length=6)

BTW, do not use split, it is deprecated.

Solution 2

... or if you don't like regexes and you still want to explode stuff, you could replace multiple characters with just one character before your explosion:

$keywords = explode("-", str_replace(array("\n", "\t", "\r", "\a", ",", "-"), "-", 
  "my string\nIt contains text.\rAnd several\ntypes of new-lines.\tAnd tabs."));
var_dump($keywords);

This blows into:

array(6) {
  [0]=>
  string(9) "my string"
  [1]=>
  string(17) "It contains text."
  [2]=>
  string(11) "And several"
  [3]=>
  string(12) "types of new"
  [4]=>
  string(6) "lines."
  [5]=>
  string(9) "And tabs."
}
Share:
29,860
WhatIsOpenID
Author by

WhatIsOpenID

Updated on June 19, 2020

Comments

  • WhatIsOpenID
    WhatIsOpenID almost 4 years

    I want to explode a string for all:

    1. whitespaces (\n \t etc)
    2. comma
    3. hyphen (small dash). Like this >> -

    But this does not work:

    $keywords = explode("\n\t\r\a,-", "my string");
    

    How to do that?

  • mickmackusa
    mickmackusa almost 4 years
    This technique makes 6 passes over the input string (full traversal of the string x6) before exploding on the hyphen. I would be using the much simpler, single-function call in shamittomar's answer because it only makes one pass over the input string.