【问题标题】:Using end() with explode() does not work使用 end() 和 explode() 不起作用
【发布时间】:2013-05-06 01:50:54
【问题描述】:

我有一个包含文件上传名称的字符串,例如“image.jpg”。 我正在尝试使用explode函数,但它返回一个错误“explode()期望参数2是字符串,数组在...中给出”

我尝试寻找原因并将其与 PHP.Net 上的使用说明进行比较,但无济于事。

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

【问题讨论】:

  • 告诉我们你如何定义$feature_icon
  • $feature_icon 应该是一个字符串,而不是一个数组。
  • 你可能还是要考虑 pathinfo()...
  • array(1) { [0]=> string(9) "image.jpg" }
  • @user2332946 请记住,无论如何您都需要将$_GET['feature_icon'] 的类型验证为字符串。如果有人使用名为 feature_icon[] 的控件在您的页面上发帖,它会自动创建一个数组,您会将其传递给爆炸,从而产生错误。

标签: php arrays string split


【解决方案1】:

你不能像现在这样使用end()

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

喜欢就好

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

Live result

【讨论】:

    【解决方案2】:

    尝试单独这样做:

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

    【讨论】:

    • 实际上,+1 as end() 需要一个引用参数;呃,不是函数调用或文字值的结果(对于迂腐,非引用返回函数调用
    • 我讨厌这种严格:(
    【解决方案3】:

    我可能应该知道最好不要回复一个多年前的帖子,但它的价值:

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

    (这不起作用,因为 end() 只能接受定义在变量中的数组,而不是函数返回的数组)可以替换为:

    $upload_extension = explode ('.', $feature_icon) [count (explode ('.', $feature_icon)) - 1];

    您是否发现比使用中间变量存储数组或使用两行代码(均如上所述)更优雅或更不优雅,这取决于个人喜好。

    【讨论】:

    • 我什至不记得问过这个问题 - 哎呀,我什至不再使用 PHP,但感谢您的回复。它可能对其他人有用!
    猜你喜欢
    • 2016-07-29
    • 2015-10-22
    • 2018-03-12
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2013-03-22
    相关资源
    最近更新 更多