为什么这段代码不起作用?
echo explode("?", $_SERVER["REQUEST_URI"])[0];
它说syntax error, unexpected '['
。
奇怪的是,这有效:
$tmp = explode("?", $_SERVER["REQUEST_URI"]);
echo $tmp[0];
但我真的想避免在这里创建这样的$tmp
变量。
我该如何解决?
在有用的答案之后,还有一些问题:语言的设计是否有任何充分的理由使其无法实现?或者PHP实现者没有想到这个?或者由于某些原因难以实现这一点吗?
答案 0 :(得分:5)
与Javascript不同,PHP无法在函数后寻址数组元素。您必须将其拆分为两个语句或使用array_slice()。
答案 1 :(得分:4)
这只能在PHP的开发分支中使用(这是一个名为“数组解除引用”的新功能):
echo explode("?", $_SERVER["REQUEST_URI"])[0];
你可以这样做
list($noQs) = explode("?", $_SERVER["REQUEST_URI"]);
或使用array_slice
/ temp变量,如stillstanding所述。您不应该使用array_shift
,因为它期望通过引用传递参数。
答案 2 :(得分:3)
当前PHP解析器的一个(愚蠢的)限制是你的第一个例子不起作用。但是,据推测,PHP的下一个主要版本将解决这个问题。
答案 3 :(得分:2)
Take a look at this previous question
Hoohaah建议使用strstr()非常好。以下内容将从字符串的开头返回,直到第一个?
(strstr()的第三个参数仅适用于PHP 5.3.0以后):
echo strstr($_SERVER["REQUEST_URI"], "?", TRUE);
或者如果你想坚持爆炸,你可以使用list()。 (2表示爆炸最多返回2个元素。)
list($url) = explode("?", $_SERVER["REQUEST_URI"], 2);
echo $url;
最后,使用原生的PHP URL parsing;
$info = parse_url($_SERVER["REQUEST_URI"]);
echo $info["scheme"] . "://" . $info["host"] . $info["path"];
答案 4 :(得分:0)
编辑:
echo current(explode("?", $_SERVER["REQUEST_URI"]));
答案 5 :(得分:0)
我相信PHP 5.4终于有了这个功能。遗憾的是,在您的普通Web主机更新其PHP版本之前还需要一段时间。我的Ubuntu VPS甚至没有默认的回购。