Почему я не могу сразу получить доступ к элементу развернутого массива?
Вопрос
Почему я не могу сразу получить доступ к элементам массива, возвращаемого explode()
?
Например, это не работает:
$username = explode('.',$thread_user)[1];
//Parse error: syntax error, unexpected '[
Но этот код делает:
$username = explode('.',$thread_user);
$username = $username[1];
Обычно я не программирую на PHP, поэтому меня это довольно сбивает с толку.
Решение
На самом деле PHP просто не поддерживает этот синтаксис.В таких языках, как Javascript (например), синтаксический анализатор может обрабатывать более сложные операции вложения/цепочки, но PHP не является одним из этих языков.
Другие советы
Причина, по которой не очевидно, как сделать то, что вы хотите, заключается в том, что explode
мог бы вернуться false
.Вам следует проверить возвращаемое значение перед индексацией в него.
Это зависит от версии. PHP 5.4 поддерживает доступ к возвращаемому массиву.
Источник: http://php.net/manual/en/language.types.array.php#example-115
Поскольку взорвать() возвращает массив, вы можете использовать другие функции, такие как $username = current(explode('.',$thread_user));
Я просто использую свою собственную функцию:
function explodeAndReturnIndex($delimiter, $string, $index){
$tempArray = explode($delimiter, $string);
return $tempArray[$index];
}
тогда код для вашего примера будет:
$username = explodeAndReturnIndex('.', $thread_user, 1);
Вот как уместить это в одну строку:
$username = current(array_slice(explode('.',$thread_user), indx,1));
Где indx
— это индекс, который вы хотите получить из развернутого массива.Я новичок в php, но мне нравится говорить «взорванный массив» :)