0

我尝试使用各种数据来查看 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"}

在这两种情况下,都会显示以下输出: Array ( [0] => blue [1] => yellow )

有什么想法吗?

4

3 回答 3

7

所以你有一个数组

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

数组切片

运行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"];

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

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

数组拼接

这个函数类似于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"];
于 2012-10-17T10:49:39.897 回答
2

array_splice($input, 2) 删除偏移量 2 处的元素,将它们替换为空(您没有指定要替换的任何内容)并返回由提取的元素组成的数组:即蓝色和黄色。变形后的原始数组($input)被引用修改,不返回

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

于 2012-10-17T10:50:20.177 回答
0

根据PHP手册array_splice

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

例如:

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

所以 of$input和 of的值print_r(array_splice...是不一样的。

于 2012-10-17T10:47:49.410 回答