"Empty delimiter" Warning when using PHP explode() function

Rounin picture Rounin · Apr 11, 2017 · Viewed 11.1k times · Source

In javascript, var myStringToArray = myString.split(''); is perfectly acceptable.

But in PHP, $My_String_To_Array = explode('', $My_String); throws an error:

Warning: explode() Empty delimiter

The PHP manual (http://php.net/manual/en/function.explode.php) explains:

If delimiter is an empty string (""), explode() will return FALSE.

So what should I be using in contemporary PHP instead of explode('', $My_String)?

So far, the alternatives I can see are:

  • split("", $My_String) - deprecated as of PHP 5.3.0
  • str_split($My_String)
  • preg_split('//', $My_String)

Seven years ago, str_split() would have been the correct alternative to use.

But is str_split() still in contemporary usage or should I only be looking at preg_split() ?

Or should I be looking at something else?

Answer

apokryfos picture apokryfos · Apr 11, 2017

If dealing with multi-byte UTF-8 strings you should use:

$array = preg_split('//u', $My_String,-1, PREG_SPLIT_NO_EMPTY);

Otherwise you can just use:

$array = str_split($My_String);

The reason is noted in the manual:

str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string.

Starting from PHP version 7.4 the mbstring equivalent of str_split was added so you can now use:

$array = mb_str_split($my_string);

mb_str_split manual page