为什么array_slice()和array_splice()做同样的事情?

时间:2012-10-17 10:42:49

标签: php arrays

我尝试使用各种数据来查看array_slice()和array_splice()之间的区别,但是这两个函数在我的计算机上产生相同的结果。

$input = array("red", "green", "blue", "yellow");
print_r(array_splice($input, 2));  //the result should be {"red", "green"}

$input = array("red", "green", "blue", "yellow");
print_r(array_slice($input, 2));   //the result should be {"blue", "yellow"}

在这两种情况下,显示以下输出: 数组([0] =>蓝色[1] =>黄色)

有什么想法可以解决吗?

3 个答案:

答案 0 :(得分:5)

所以你有一个数组

$input = ["red", "green", "blue", "yellow"];

<强> array_slice

运行array_slice($input, 2)会返回$offset(2)和$length所要求的部分 - 您省略的3d参数(这意味着很多)因为还有)。另外有趣的是,$input不是通过引用传递的,这意味着它将保持不变。

$result = array_slice($input, 2);
// $input == [0 => "red", 1 => "green", 2 => "blue", 3 => "yellow"];
// $result == [0 => "blue", 1 => "yellow"];

有一个可选的第4个参数来保存键,这意味着返回的键不变。

$result = array_slice($input, 2, null, true);
// $result == [2 => "blue", 3 => "yellow"];

<强> array_splice

此函数类似于array_slice,但这次数组是通过引用传递的。所以函数现在可以改变初始数组。另外,第4个参数是接受一个应该替换切片部分的数组(如果省略它只是意味着该部分被替换为空数组)。

$result = array_splice($input, 2);
// $input = [0 => "red", 1 => "green"];
// $result == [0 => "blue", 1 => "yellow"];

$result = array_splice($input, 2, null, ["brown", "black"]);
// $input = [0 => "red", 1 => "green", 2 => "brown", 3 => "black"];
// $result == [0 => "blue", 1 => "yellow"];

答案 1 :(得分:2)

array_splice($ input,2)删除偏移量为2的元素,将它们替换为空(你没有指定要替换的东西)并返回一个由提取的元素组成的数组:那是蓝色和黄色。 transmogrified原始数组($ input)通过引用修改,而不是返回

array_slice($ input,2)返回$ input中偏移量2的所有元素:那是蓝色和黄色

答案 2 :(得分:0)

根据array_splice的PHP手册:

  

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

例如:

$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
// $input is now array("red", "green")

因此$inputprint_r(array_splice...的值不一样。