Array_splice充当array_slice?

时间:2011-05-05 17:16:41

标签: php arrays

我有问题确切了解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我明白了。我没有在array_splice上使用var_dump,而是使用$ input作为array_splice更改$ input而不是返回新值。

array_slice返回值,而array_splice将值设置为$ input。

MOD请关闭或删除此内容。

3 个答案:

答案 0 :(得分:8)

来自the docs

  

<强>描述
  array array_splice(array&amp; $ input,int $ offset [,int $ length = 0 [,mixed $ replacement]])

     

从输入数组中删除由offset和length指定的元素,并将其替换为替换数组的元素(如果提供)。

     

...

     

返回值

     

返回由提取的元素组成的数组。

你只是可怕,非常困惑。

答案 1 :(得分:3)

splice删除数组元素的子集,并在其位置插入新元素,基本上替换它们。 slice只是将数组元素的子集拉入一个单独的数组中。

你误解的地方是slice的结果作为一个单独的数组从函数返回,其中splice实际操作作为参数传入的数组。

答案 2 :(得分:0)

在您的第一个代码示例中,评论指出变量$input中剩下的内容是array("red", "green"),但未提及var_dump返回的内容,这是您的试用版返回的内容