PHP中的array_splice()函数到底怎么用啊?

我写的代码:$array=array(1,2,3,4,5);$array[7]=7;$array[]=8;foreach(array_splice($array,2)as... 我写的代码:
$array = array(1,2,3,4,5);
$array[7] = 7;
$array[] = 8;
foreach( array_splice($array,2) as $key => $value )
{
echo "$key:$value<br />";
}
预想结果:

0:1
1:2
2:3
可实际运行的结果却是:
0:3
1:4
2:5
3:7
4:8
为什么会是这样?帮助文档我看了,可是越看越不懂。希望能有高手帮我解决这个问题,最好说的通俗易懂点。谢谢了
展开
 我来答
windblast
2012-10-12 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13624
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部
简单点说,array_splice() 函数的功能,是把给定数组中从某位置开始的数组元素去掉,返回一个包含有被移除单元的数组。因此,你的疏忽之处在于:

foreach( array_splice($array,2) as $key => $value )

这句代码中的 array_splice($array,2) 的结果是那些 被你移除数组的元素,而不是你意想中 你想保留的数据。

你需要仔细看下 array_splice的函数原型声明:

array array_splice( array &$input , int$offset 。。。。。)

注意:&$input 这个参数是用地址传递的方式,而不是通常的值传递,所以,调用 array_splice 函数之后,会直接将$input数组的数据进行修改。

综合上面,修改代码如下:

<?php
$array = array(1,2,3,4,5);
$array[7] = 7;
$array[] = 8;
$arr = array_splice($array,3);
foreach($array as $key => $value)
{
echo "$key:$value<br />";
}
?>
巨优多
2012-10-12 · TA获得超过468个赞
知道小有建树答主
回答量:570
采纳率:50%
帮助的人:343万
展开全部
<?php
$array = array(1,2,3,4,5);
$array[7] = 7;
$array[] = 8;
print_r($array);
// 此时的$array是:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [7] => 7 [8] => 8 )

foreach( array_splice($array,2) as $key => $value )
{
echo "$key:$value<br />";
}
你要注意array_splice($array,2)中的$array是用的数组的引用,所以可以改变$array的值,但是array_splice得返回值是数组$array中被删除的那些数组元素,参考php手册中的吃函数下面讨论的一个例子:

$input = array("red", "green", "blue", "yellow");
print_r(array_splice($input, 3)); // Array ( [0] => yellow )
print_r($input); //Array ( [0] => red [1] => green [2] => blue )
仔细看这个例子.
而你的foreach 里面使用的是array_splice的返回值,而不是$array,也许你的本意是用$array.但是你把array_splice的返回值和$array搞混了.
为了明确一下,你可以这样把原来的foreach改成这样试试:

$ret_arr= array_splice($array,2);
print_r($ret_arr);
foreach( $ret_arr as $key => $value )
{
echo "$key:$value<br />";
}

//要达到你的预期也很简单,改成这样:
array_splice($array,2);
foreach( $array as $key => $value )
{
echo "$key:$value<br />";
}
当然,你的预期里面有些是不对的,array_splice($array,2)中的2是指偏移量,也就是从数组$array开头开始偏移2个,以后的元素删除,所以只会保留数组的前2个元素,后面的都删除了,所以结果不应该包括3这个元素

?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daiyong1992
2012-10-12
知道答主
回答量:6
采纳率:0%
帮助的人:8861
展开全部
array_splice(数组名,要删除数组的下标,删除该下标后多少个)
并且重新排序数组

例:
$array=array(1,2,3,4,5,6);
$newarray=array_splice($array,2,1);
print_r($newarray);

以上输出结果
array([0]=>1,[1]=>2,[2]=>4,[3]=>5,[4]=>6);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仙凯樱檬绪1c
2012-10-12 · TA获得超过224个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:251万
展开全部
感觉就是把之前的0,1这2个值删除了。。所以就
http://www.w3school.com.cn/php/func_array_splice.asp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式