使用PHP explode()函数时出现"空分隔符"警告

15
在JavaScript中,var myStringToArray = myString.split('');是完全可以接受的。但在PHP中,$My_String_To_Array = explode('', $My_String);会抛出错误:

警告:explode() Empty delimiter

PHP手册(http://php.net/manual/en/function.explode.php)解释说:

如果分隔符为空字符串(“”),则explode()将返回FALSE

那么在当前的PHP版本中,我应该使用什么来代替explode('', $My_String)呢? 目前我能看到的替代方案是:
  • split("", $My_String)-自PHP 5.3.0起已被弃用
  • str_split($My_String)
  • preg_split('//', $My_String)
七年前,str_split()是正确的替代方案。 但现在是否仍然适用于str_split(),还是只需考虑preg_split()? 还是应该寻找其他东西?

你想在空格上分割字符串吗?如果是的话,可以使用 explode(' ', $string)。如果你想将一个字符串拆分成单个字符,可以通过 $string[0] ... $string[6] 等方式访问它们。 - junkfoodjunkie
1
str_split 函数页面上没有任何警告或其他提示,因此可以使用。 - u_mulder
1
那么在当代的PHP中,我应该使用什么呢?你能告诉我们你想要实现什么吗? - Nikkorian
2
str_split() 是完全有效的。它没有被弃用,很可能永远不会被弃用。不要将其与 split() 混淆,后者只是 explode() 的别名。preg_split() 不是 str_split() 的替代品。它们具有不同的参数并以不同的方式工作。 - axiac
4个回答

31

如果处理多字节的 UTF-8 字符串,您应该使用:

$array = preg_split('//u', $My_String,-1, PREG_SPLIT_NO_EMPTY);
否则,您可以直接使用:
$array = str_split($My_String);

原因在手册中有说明:

str_split()处理多字节编码字符串时,将以字节为单位进行拆分,而不是字符。

从PHP 7.4版本开始,已添加了mbstring等效的str_split函数,因此您现在可以使用:

$array = mb_str_split($my_string);

mb_str_split 手册页面


一份知識豐富且全面的回答 - 謝謝。 - Rounin

10

谢谢你,@MattJenkins。你能确认str_split()仍然在现代使用中吗?在2017年4月,它是否仍被认为是最佳实践? - Rounin
1
我不确定这是否被视为最佳实践,但是我相信它的设计完全符合您的要求。此外,这是一种有效且维护良好的方法,没有任何降级警告。 - Matt Jenkins

2
//This will return error!!
 explode('', 'aaa');
//PHP Error:  explode(): Argument #1 ($separator) cannot be empty...

//Change to str_split
str_split('aaa');

[
     "a",
     "a",
     "a",
]

2

第一个参数是必需的

explode(separator,string,limit)

[separator]: required;
[string]: required;
[limit]: alternative.

一个没有 [separator] 参数的 explode 函数是毫无意义的。
就这些。O(∩_∩)O~

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接