【问题标题】:php explode - needing second elementphp爆炸 - 需要第二个元素
【发布时间】:2013-06-08 02:48:03
【问题描述】:

更多是出于兴趣...

$_GET['unique'] = blahblahblah=this_is_what_im_interested_in

我知道我可以像这样得到第二个元素:

$words = explode('=', $_GET['unique']);
echo $words[1];

有没有办法在一行中得到这个? - 那将“希望”允许我将其添加到函数/对象调用中:

$common->resetPasswordReply(... in here I would put it....);

喜欢

$common->resetPasswordReply(explode('=', $_GET['unique'])[1]);

我只是想看看这是否可行。

【问题讨论】:

  • 在最近的 PHP 版本中,当然。 PHP 解析器的那个特殊的...弱点仅在过去半年左右的时间内得到修复。
  • 另一种有趣的方式是使用 array_shift 两次,如 $common->resetPasswordReply(array_shift(array_shift(explode('=', $_GET['unique']))));
  • 你的最后一行代码应该已经可以工作了,如果你在不需要询问之前尝试过

标签: php arrays object get indexing


【解决方案1】:

如果函数返回数组/对象,PHP 支持对函数进行索引;所以以下也可以:

echo explode('=', $_GET['unique'])[1];

编辑

这被称为array dereferencing,并已在 PHP 文档中介绍:

从 PHP 5.4 开始,可以取消对数组结果的引用 直接调用函数或方法。以前只能使用 临时变量。

从 PHP 5.5 开始,可以取消对数组字面量的引用。

【讨论】:

  • 从 5.4 开始是这样,旧版本不支持。
【解决方案2】:

这应该为你做。

substr($str, strpos($str, "=")+1);

【讨论】:

    【解决方案3】:

    奇怪的是,您“几乎”可以使用list() 执行此操作,但您不能在函数调用中使用它。我只照你说的发帖'more out of interest' :-

    $_GET['unique'] = "blahblahblah=this_is_what_im_interested_in";
    
    list(, $second) = explode('=', $_GET['unique']);
    
    var_dump($second);
    

    输出:-

    string 'this_is_what_im_interested_in' (length=29)
    

    您可以在manual page 的第一组示例中看到关于list() 灵活程度的好示例。

    我认为值得指出的是,尽管您的示例可行:-

    $common->resetPasswordReply(explode('=', $_GET['unique'])[1]);
    

    它确实会混淆您的代码,并且您传递给函数的内容并不明显。而类似以下的内容更具可读性:-

    list(, $replyText) = explode('=', $_GET['unique']);
    $common->resetPasswordReply($replyText));
    

    考虑在 6 个月后返回您的代码并尝试对其进行调试。使其尽可能自我记录。另外,不要忘记,当您在这里接受用户输入时,需要在某个时候对其进行清理。

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 2020-02-16
      • 2012-02-07
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多