如果你对一个字符串使用explode函数,且该字符串不包含分隔符,那么会出现错误吗?

13

我正在使用php获取url的一部分。这部分可能带有或者没有尾随的'?'值。例如:我正在分解url:stackoverflow.com/questions,然后想要获取questions,所以我做了如下操作:explode('/',$url)。在这个示例中,假设url可能如下所示:stackoverflow.com/questions?query。我不想要结尾的'query',所以我执行了explode('?',$questionurl[no.])。然而,如果字符串中不存在分隔符,explode会如何处理?它会返回原始字符串还是返回false?

我已经阅读了php文档并查看了stack的一些问题,但似乎找不到完全符合这种情况的答案。

我可以自己进行测试,但我使用的环境是设置为与Drupal一起工作的。因此,要测试一个简单的查询需要进行很多麻烦的操作。我认为这对于所有人和未来的参与者来说都更有用,在这里提供翻译。


3
不,它返回一个数组,其中元素的数量取决于limit参数的值,要么没有元素,要么只有一个元素……就像文档中所描述的那样:“如果__delimiter__包含一个不在__string__中的值,并且使用了负数的__limit__,则将返回一个空数组,否则将返回一个包含__string__的数组。” - Mark Baker
因此,它将字符串作为数组返回,就像它本来的样子。所以我应该调用 $url[0]。 - Edward G-Jones
请注意 - 您可以在服务器上的任何位置创建一个名为 test.php 的文件,将代码放入 <?php ?> 标签中,它将正常工作。这与Drupal无关。 - Chris Baker
根据不同的角度看,PHP 可能会发出一个“NOTICE”(只有在您解除封装结果时) ,如此处所示(尽管在 PHP 的世界中技术上“Notice”与错误是不同的 参见)。 - y2k-shubham
3个回答

12
请阅读PHP文档。它存在是有原因的。

https://www.php.net/explode

返回一个由分隔符形成的边界拆分字符串参数创建的字符串数组。 如果分隔符是一个空字符串(""),explode() 将返回 FALSE。如果分隔符包含一个不在字符串中的值,并且使用了负限制,则将返回一个空数组,否则将返回一个包含字符串的数组。

2
我认为是“负限制”这个术语让我困惑了,我不确定它究竟指的是什么意思。 - Edward G-Jones
2
阅读手册页面并查看使用限制的示例(第三个参数)。然后你就会明白的 ;) - Maarkoize
如果您不理解 PHP 函数中使用的参数,则必须从相关函数的文档中阅读参数部分。 - kasper Taeymans
1
你可以使用array_pad函数将结果数组调整为所需长度。这样至少会消除错误。例如,list($var1,$var2)= array_pad(explode(“ /”,$url),2,null); - Chris Middleton

7

不会抛出任何错误 - 它将返回一个仅包含整个字符串的元素的数组(记住,explode 返回一个数组)。


1
应该是注释而不是答案。 - Satish Sharma
抱歉,我在这里比较新。这个回答是否太简单了?在SO上有回答简单性的限制吗? - cbreezier
1
@SatishSharma 不,这个答案比被接受的答案更好,因为它不会让人们误以为空数组将被返回。 - unity100

1

来自php.net explode()手册页面:

如果分隔符中包含一个字符串不在原字符串中,并且使用了负限制,则会返回一个空数组,否则将返回一个包含原字符串的数组。


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