2011-05-05 64 views
7

我有问题,确切地了解array_splice和array_slice做了什么。从我可以告诉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。

MODs请关闭或删除它。

回答

8

the docs

说明
阵列array_splice(阵列& $输入,整数$偏移,INT $长度= 0 [,混合$替换]])

移除元素由输入数组中的偏移量和长度指定,并用替换数组的元素(如果提供)替换它们。

...

返回值

返回由所提取的元件的阵列。

你只是可怕的,可怕的困惑。

+3

是的,我刚刚发帖后就明白了。早晨没有咖啡。既然你的文章解释了我提出的问题,我会标记为答案。你是对的......我们很困惑。 – Bot 2011-05-05 17:24:24

0

在你的第一个代码示例注释状态是什么在变$input剩下的是array("red", "green")但不做任何由var_dump返回的内容中提到这是你的试训返回

3

剪接删除数组元素的一个子集并在他们的位置插入新的元素,基本上取代它们。切片只是将数组元素的一个子集拉入单独的数组中。

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