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

StackOverflow https://stackoverflow.com/questions/2269145

  •  20-09-2019
  •  | 
  •  

Вопрос

Почему я не могу сразу получить доступ к элементам массива, возвращаемого 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, но мне нравится говорить «взорванный массив» :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top