Почему я не могу сразу получить доступ к разнесенному элементу массива? - PullRequest
7 голосов
/ 16 февраля 2010

Почему я не могу сразу получить доступ к элементам в массиве, возвращаемом explode()?

Например, это не работает:

$username = explode('.',$thread_user)[1]; 
//Parse error: syntax error, unexpected '[

Но этот код делает:

$username = explode('.',$thread_user); 
$username = $username[1];

Я обычно не программирую на PHP, так что это довольно запутанно для меня.

Ответы [ 6 ]

6 голосов
/ 16 февраля 2010

Причина, по которой не очевидно, как сделать то, что вы хотите, состоит в том, что explode может вернуть false. Вы должны проверить возвращаемое значение, прежде чем индексировать его.

5 голосов
/ 01 сентября 2013

Это зависит от версии. PHP 5.4 поддерживает доступ к возвращенному массиву.

Источник: http://php.net/manual/en/language.types.array.php#example-115

4 голосов
/ 16 февраля 2010

На самом деле, PHP просто не поддерживает этот синтаксис. В таких языках, как Javascript (например), синтаксический анализатор может обрабатывать более сложные операции вложения / цепочки, но PHP не является одним из этих языков.

2 голосов
/ 16 февраля 2010

Поскольку explode () возвращает массив, вы можете использовать другие функции, такие как $username = current(explode('.',$thread_user));

1 голос
/ 06 мая 2012

Вот как записать это в одну строку:

$username = current(array_slice(explode('.',$thread_user), indx,1));

Где indx - это индекс, который вы хотите получить из массива в разобранном виде. Я новичок в php, но мне нравится говорить взорванный массив:)

1 голос
/ 09 апреля 2012

Я просто использую свою собственную функцию:

function explodeAndReturnIndex($delimiter, $string, $index){
    $tempArray = explode($delimiter, $string);
    return $tempArray[$index];
}

код для вашего примера будет:

$username = explodeAndReturnIndex('.', $thread_user, 1);
...