Разнесение, доступ к массиву и синтаксис PHP - PullRequest
0 голосов
/ 14 декабря 2011

Просто интересно, почему этот синтаксис не работает в PHP?Какой обходной путь используют большинство людей - если вы хотите написать краткий однострочный код?

$str = explode(" ", "foo bar")[0];
// thought $str would be $foo. instead I get error.
// guess I hadn't noticed this issue before.

Ответы [ 3 ]

2 голосов
/ 14 декабря 2011

Как уже говорили люди, это не может быть сделано так.Если вы действительно, действительно хотите сделать это в одну строку, вы можете использовать троичное выражение.

$str = ($tmp=explode(" ", "foo bar")) ? $tmp[0] : '';
echo $str; // "foo"

Обновление:

Это может выглядеть "менее уродливо"если вы включите это в функцию.

function single_explode($delim, $str, $index) {
    return ($tmp=explode($delim, $str)) ? $tmp[$index] : '';
}

$str = single_explode(" ", "foo bar", 0);

echo $str;
2 голосов
/ 14 декабря 2011

PHP не является цепным, что означает, что вы не можете объединить функцию explode с аксессором, таким как [0]. Что вы хотите сделать, это:

$arr = explode(" ", "foo bar");
$str = $arr[0];

«Chainable» может быть неправильным словом, но в любом случае, вы не можете комбинировать подобные функции.

0 голосов
/ 14 декабря 2011

Дополнительным методом является использование array_shift, которое отбрасывает первый элемент массива и возвращает его.

<?php
    echo array_shift(explode(" ", "foo bar")); // === foo
?>

См. Этот полный пример .Не используйте его в строгом режиме.

...