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

我写的代码:
$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
为什么会是这样?帮助文档我看了,可是越看越不懂。希望能有高手帮我解决这个问题,最好说的通俗易懂点。谢谢了

简单点说,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 />";
}
?>
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-12
<?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这个元素

?>
第2个回答  2012-10-12
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);
第3个回答  2012-10-12
感觉就是把之前的0,1这2个值删除了。。所以就

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网