Почему этот код не работает?
echo explode("?", $_SERVER["REQUEST_URI"])[0];
Он говорит о syntax error, unexpected '['
.
Как ни странно, это работает:
$tmp = explode("?", $_SERVER["REQUEST_URI"]); echo $tmp[0];
Но я действительно хочу избежать создания такой переменной $tmp
.
Как это исправить?
После полезных ответов некоторые оставшиеся вопросы: Есть ли веская причина в разработке языка, чтобы сделать это невозможным? Или разработчики PHP просто не думали об этом? Или это почему-то трудно сделать это возможным?
Это (глупое) ограничение текущего парсера PHP, что ваш первый пример не работает. Однако, предположительно, следующая основная версия PHP исправит это.
В отличие от Javascript, PHP не может адресовать элемент массива после функции. Вы должны разбить его на два утверждения или использовать array_slice ().
Это разрешено только в ветке разработки PHP (это новая функция, называемая «разыменование массива»):
echo explode("?", $_SERVER["REQUEST_URI"])[0];
Вы можете сделать это
list($noQs) = explode("?", $_SERVER["REQUEST_URI"]);
или используйте переменную array_slice
/ temp, как это было сказано. Вы не должны использовать array_shift
, поскольку он ожидает аргумент, переданный по ссылке.
Взгляните на этот предыдущий вопрос .
Предложение Hoohaah об использовании strstr () довольно приятно. Следующие строки вернутся с начала строки до первого ?
(третий аргумент для strstr () доступен только для PHP 5.3.0):
echo strstr($_SERVER["REQUEST_URI"], "?", TRUE);
Или, если вы хотите придерживаться взорваться, вы можете использовать if list () . (2 указывает, что не более 2 элементов будут возвращены взорваться).
list($url) = explode("?", $_SERVER["REQUEST_URI"], 2); echo $url;
Наконец, для использования изначально доступных PHP-синтаксического анализа URL ;
$info = parse_url($_SERVER["REQUEST_URI"]); echo $info["scheme"] . "://" . $info["host"] . $info["path"];
РЕДАКТИРОВАТЬ:
echo current(explode("?", $_SERVER["REQUEST_URI"]));
Я считаю, что PHP 5.4 поставляется с этой функцией, наконец. К сожалению, это будет некоторое время, прежде чем ваш средний веб-хост обновит свою версию PHP. Мой Ubuntu VPS даже не имеет его в репозиториях по умолчанию.