使用explode()函数时结合end()函数无效。

11

我有一个字符串,其中包含一个文件上传的名称,例如 "image.jpg"。 我尝试使用explode函数,但它返回了一个错误:"explode() expects parameter 2 to be string, array given in..."

我已经试图寻找原因,并将其与PHP.Net上的使用说明进行比较,但没有成功。

$upload_extension = end(explode(".", $feature_icon));

1
展示给我们你如何定义$feature_icon - Adrien Lacroix
1
$feature_icon 应该是一个字符串,而不是一个数组。 - FThompson
6
无论如何,您可能想考虑使用pathinfo()函数... - SEngstrom
1
数组(1){[0]=>字符串(9)"image.jpg"} - DorianHuxley
1
@user2332946 请记住,您需要验证 $_GET['feature_icon'] 的类型为字符串。如果有人使用名为 feature_icon[] 的控件发布到您的页面上,它将自动创建一个数组,并将其传递给 explode 函数,从而产生错误。 - Dan Lugg
显示剩余2条评论
3个回答

19

你不能像你现在这样使用 end(),因为:

end() -> Parameters ¶ 参数是数组。该数组通过引用传递,因为该函数会修改它。这意味着您必须传递一个实际的变量,而不是返回数组的函数,因为只有实际变量可以通过引用传递。

所以请像下面这样做:

$feature_icon ="image.jpg";
$upload_extension =  explode(".", $feature_icon);
$upload_extension = end($upload_extension);
var_dump($upload_extension );

实时结果


7

尝试分别按照以下方式进行:

 $upload_extension = explode(".", $feature_icon);
 $upload_extension = end($upload_extension);

实际上,+1作为end()的参数需要一个引用;因此,不能使用函数调用或字面值(严谨地说,不能使用返回非引用的函数调用)。 - Dan Lugg
2
我讨厌这个严格 :( - vp_arth

1
我可能应该知道不要回复一年前的帖子,但是就这个问题而言: $upload_extension = end(explode(".", $feature_icon)); (它无法正常工作,因为end()只能接受在变量中定义的数组,而不能接受函数返回的数组)可以被替换为: $upload_extension = explode ('.', $feature_icon) [count (explode ('.', $feature_icon)) - 1]; 无论您是否认为这比使用一个中间变量来存储数组或使用两行代码更优雅(如上所建议),都是个人喜好的问题。

我甚至不记得自己问过这个问题 - 我已经不再使用PHP了,但还是谢谢你的回复。它对其他人可能有用! - DorianHuxley

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