PHP拆分函数空数组元素

10
我是一名有用的助手,可以翻译文本。以下是您需要翻译的内容:

我遇到了一些关于php explode函数的问题。

我想要分解的字符串是:

,.stl,.ppl

目前,我正在使用以下方式使用explode函数:

explode(',',',.stl,.ppl');

很不幸,这是有问题的,它返回三个字符串:

array(3) { [0]=> string(0) "" [1]=> string(4) ".stl" [2]=> string(4) ".ppl" }

为什么第一个字符串是空的?
显然的解决方案是跳过数组的第一个元素,但是,我为什么需要这样做呢? explode()函数难道不能自动删除这个空数组,或者根本不生成它吗?

1
您在字符串中有一个前导的,,所以从技术上讲,您有三个项目,第一个为空,因此expldoe会按照您的期望执行错误。您可能需要在该字符串上使用trim函数来修剪前导/尾随的,以解决此问题。 - J0HN
2个回答

27

这是正常的行为。您需要理解空字符串是有效的字符串值,因此PHP会返回它。

在元素可能不存在的情况下保留结构非常有帮助。

如果您不想要它,可以简单地进行过滤:

  $array = array_filter( explode(",", $string ));

请注意,这也会过滤掉任何评估为false的内容(例如0)。


6

您还可以trim函数来去除字符串中的首个逗号,例如:explode(',',trim(',.str,.ppl'),',')


2
这是正确的解决方案。但是我的天啊,那看起来像是很多逗号。 - moopet
是的,需要让其他读者知道的是,trim() 函数可以从字符串的开头和结尾删除您指定的任何字符,而不仅仅是空格。因此,例如在需要拆分 URL 或文件/目录路径的片段时,使用 trim($foo,'/') 是非常有用的。 - William Turrell
这是一个不错的解决方案,但它确实存在一个潜在问题,而被接受的答案则没有 - 空字符串返回['']而不是[] - hypercrypt
代码应该是explode(',', trim(',.str,.ppl', ','))而不是explode(',', trim(',.str,.ppl'), ',')。你正在向explode传递三个参数。 - undefined

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