У меня проблемы с пониманием того, что делают array_splice и array_slice. Из того, что я могу сказать, array_splice должен возвращать массив ПОСЛЕ вынимания определенных элементов, а array_slice должен извлекать срез массива.
Следующий код из руководства php.net/array_splice показывает, что этот код должен работать.
$input = array("red", "green", "blue", "yellow"); var_dump(array_splice($input, 2)); // $input is now array("red", "green") $input = array("red", "green", "blue", "yellow"); var_dump(array_slice($input, 2)); // $input is now array("red", "green")
Однако, когда я запускаю этот код на php 5.3.4 и 5.1.6, результаты
array 0 => string 'blue' (length=4) 1 => string 'yellow' (length=6) array 0 => string 'blue' (length=4) 1 => string 'yellow' (length=6)
Не понимаю ли я руководство или это ошибка? Мне кажется, что array_splice действует так же, как array_slice
Кроме того, похоже, что это не замена
$input = array("red", "green", "blue", "yellow"); var_dump(array_splice($input, 2, 2, array('foo')));
выходы
array 0 => string 'blue' (length=4) 1 => string 'yellow' (length=6)
Может кто-то подтвердить это ошибка, и если не объяснить, как это СЛЕДУЕТ работать?
РЕДАКТИРОВАТЬ:
Nvm Я понял это. Вместо использования var_dump в array_splice я должен использовать $ input, поскольку array_splice меняет $ input вместо того, чтобы возвращать новые значения.
array_slice возвращает значения, а array_splice устанавливает значения в $ input.
MOD, пожалуйста, закройте или удалите это.
Из документов :
Описание
array array_splice (array & $ input, int $ offset [, int $ length = 0 [, mixed $ replacement]])Удаляет элементы, обозначенные смещением и длиной из входного массива, и заменяет их элементами массива замещения, если они указаны.
…
Возвращаемые значения
Возвращает массив, состоящий из извлеченных элементов.
Вы просто ужасно сбиты с толку.
splice удаляет подмножество элементов массива и вставляет новые элементы в их местоположение, в основном заменяя их. slice просто подтягивает подмножество элементов массива в отдельный массив.
Там, где вы недопонимаете, результат отрезка возвращается из функции как отдельный массив, где сращивание фактически манипулирует массивом, который передается в качестве аргумента.
В вашем первом примере кода в комментарии говорится, что то, что осталось в переменной $input
– это array("red", "green")
но не упоминает содержимое, возвращаемое var_dump
что и является результатом ваших попыток