我有一个字符串,其中包含一个文件上传的名称,例如 "image.jpg"。 我尝试使用explode函数,但它返回了一个错误:"explode() expects parameter 2 to be string, array given in..."
我已经试图寻找原因,并将其与PHP.Net上的使用说明进行比较,但没有成功。
$upload_extension = end(explode(".", $feature_icon));
你不能像你现在这样使用 end()
,因为:
end()
-> Parameters ¶ 参数是数组。该数组通过引用传递,因为该函数会修改它。这意味着您必须传递一个实际的变量,而不是返回数组的函数,因为只有实际变量可以通过引用传递。
所以请像下面这样做:
$feature_icon ="image.jpg";
$upload_extension = explode(".", $feature_icon);
$upload_extension = end($upload_extension);
var_dump($upload_extension );
尝试分别按照以下方式进行:
$upload_extension = explode(".", $feature_icon);
$upload_extension = end($upload_extension);
end()
的参数需要一个引用;因此,不能使用函数调用或字面值(严谨地说,不能使用返回非引用的函数调用)。 - Dan Lugg$upload_extension = end(explode(".", $feature_icon));
(它无法正常工作,因为end()只能接受在变量中定义的数组,而不能接受函数返回的数组)可以被替换为:
$upload_extension = explode ('.', $feature_icon) [count (explode ('.', $feature_icon)) - 1];
无论您是否认为这比使用一个中间变量来存储数组或使用两行代码更优雅(如上所建议),都是个人喜好的问题。
$feature_icon
。 - Adrien Lacroix$feature_icon
应该是一个字符串,而不是一个数组。 - FThompson$_GET['feature_icon']
的类型为字符串。如果有人使用名为feature_icon[]
的控件发布到您的页面上,它将自动创建一个数组,并将其传递给 explode 函数,从而产生错误。 - Dan Lugg