我尝试使用各种数据来查看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] =>黄色)
有什么想法可以解决吗?
答案 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")
因此$input
和print_r(array_splice...
的值不一样。