PHP:获取数组元素

时间:2010-08-14 19:37:55

标签: php arrays

为什么这段代码不起作用?

echo explode("?", $_SERVER["REQUEST_URI"])[0];

它说syntax error, unexpected '['

奇怪的是,这有效:

$tmp = explode("?", $_SERVER["REQUEST_URI"]);
echo $tmp[0];

但我真的想避免在这里创建这样的$tmp变量。

我该如何解决?


在有用的答案之后,还有一些问题:语言的设计是否有任何充分的理由使其无法实现?或者PHP实现者没有想到这个?或者由于某些原因难以实现这一点吗?

6 个答案:

答案 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甚至没有默认的回购。