PHP - explode должен вернуть массив, но строка, указанная в array_shift - PullRequest
0 голосов
/ 06 июня 2019

У меня есть следующий код:

$path = ltrim($_SERVER['REQUEST_URI'], '/');
$elements = explode('/', $path);
var_dump($elements);
echo is_array($elements) ? 'true' : 'false';
$elements=array_shift($elements);

explode(delimeter, string) должен вернуть array. И он возвращается, когда is_array(bool) возвращает true, но array_shift(array) выдает следующую ошибку:

Warning
: array_shift() expects parameter 1 to be array, string given in

Почему это происходит, даже если $elements является массивом?

PHP 7.2.19

1 Ответ

1 голос
/ 06 июня 2019

Метод array_shift() сдвигает первое значение массива и возвращает его. Так что, если вы запустите

$elements = array_shift($elements);

содержимое $elements будет первым элементом массива (в вашем случае - строкой).

Вы можете использовать это так:

$path = ltrim('/path/to/resource', '/');
$elements = explode('/', $path);
$first_element = array_shift($elements);
var_dump($first_element, $elements);

И первый элемент массива будет в переменной $first_element. Массив $elements больше не будет содержать этот элемент.

Демо: https://3v4l.org/DHcsJ

Более подробную информацию о методе можно найти в официальной документации .

...