Is There a Way to Use Multiple Delimiters With the PHP explode() Function?

Find out how you can "explode" a PHP string using multiple delimiters

By default, the PHP explode() function does not allow specifying multiple delimiters. However, there are other ways in which you achieve the same result:

Using str_replace() and explode()

You can make all the delimiters in the string the same using str_replace() by passing an array of delimiters as the first argument to the function. After that you can use explode() as you normally would on the resulting string. For example:

$delimiters = ['.', '!', '?'];
$str = 'foo! bar? baz.';
$newStr = str_replace($delimiters, $delimiters[0], $str); // 'foo. bar. baz.'

$arr = explode($delimiters[0], $newStr);

echo print_r($arr, true); // ['foo', 'bar', 'baz', '']

If you want to remove empty values from the matches, then you can use the array_filter() function on the resulting array like so:

$delimiters = ['.', '!', '?'];
$str = 'foo! bar? baz.';
$newStr = str_replace($delimiters, $delimiters[0], $str); // 'foo. bar. baz.'

$arr = explode($delimiters[0], $newStr);
$filteredArr = array_filter($arr);

echo print_r($filteredArr, true); // ['foo', 'bar', 'baz']

Please note that the array_filter() function preserves the array keys (which may result in gaps in an indexed array). Reindexing the array should be possible with array_values().

Using preg_split()

Instead of using the explode() function, you could use preg_split(). With it you can specify a regular expression with multiple delimiters and split a string into an array. For example:

$str = 'foo! bar? baz.';
$arr = preg_split('/[.|!|?]/', $str);

echo print_r($arr, true); // ['foo', bar, baz, '']

If you want to remove non-empty values from the matches, then you can simply pass in the PREG_SPLIT_NO_EMPTY flag as the fourth argument to preg_split() like so:

$str = 'foo! bar? baz.';
$arr = preg_split('/[.|!|?]/', $str, -1, PREG_SPLIT_NO_EMPTY);

echo print_r($arr, true); // ['foo', bar, baz]

Hope you found this post useful. It was published . Please show your love and support by sharing this post.