我写的代码:
$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 />";
}
?>
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这个元素
?>
$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);
并且重新排序数组
例:
$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个值删除了。。所以就