我想问一下以下这段代码为什么会输出这样的结果?不是应该全部为空吗?

wboebnwoeinwoen 2013-08-22 09:43:50

$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
for ($i = 0; $i < count($a1); $i++) {
array_splice($a1,$i, 1);
}
print_r($a1);


效果:
Array ( [0] => Cat [1] => Bird )
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
回锅鱼 2013-08-22
  • 打赏
  • 举报
回复
这里你要注意count($a1),每次循环都要计算一次,但是每次里面的元素都在减少一个,到第三次次循环的时候,元素个数和$i都是2,所以就结束了,所以肯定会剩下两个元素的,即使你把count提出来,即这里直接写4,也肯定有剩余吧,虽然我没有去写写看,但是这里的$i是不断增加的,而第三次循环时,元素还有2个,而已经没有了第三个位置,所以肯定有剩余,你可以在for循环的最后输出下这个$a1,看一下每次都变成了什么,为什么
EnForGrass 2013-08-22
  • 打赏
  • 举报
回复
这个不难理解吧 count($a1)每次array_splice移除之后都在变化 $a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird"); for ($i = 0; $i < count($a1); $i++) { array_splice($a1,$i, 1); } print_r($a1); 第1次循环,$i = 0,count($a1)=4 移除Dog,$a1=array(0=>"Cat",1=>"Horse",2=>"Bird"); 第2次循环,$i = 1,count($a1)=3 移除Horse,$a1=array(0=>"Cat",1=>"Bird"); 第3次循环,$i = 2,count($a1)=2 没用任何值可以移除,$a1=array(0=>"Cat",1=>"Bird");退出循环 结果就是 $a1=array(0=>"Cat",1=>"Bird");
xuzuning 2013-08-22
  • 打赏
  • 举报
回复
自己看
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
for ($i = 0; $i < count($a1); $i++) {
  array_splice($a1,$i, 1);
  echo "i=$i ", print_r($a1, 1), '<br>';  
}
print_r($a1);
i=0 Array ( [0] => Cat [1] => Horse [2] => Bird ) i=1 Array ( [0] => Cat [1] => Bird ) Array ( [0] => Cat [1] => Bird ) 问题在于你的起点不对
再看我一眼 2013-08-22
  • 打赏
  • 举报
回复
模拟下过程 第一次循环 array_splice($a1,0, 1); $a1变成了 $a1=array(0=>"Cat",1=>"Horse",2=>"Bird"); 第二次循环 array_splice($a1,1, 1); $a1变成了 $a1=array(0=>"Cat",1=>"Bird"); 第三次循环 $i==2 count($11)==2 不符合循环条件 循环退出
wboebnwoeinwoen 2013-08-22
  • 打赏
  • 举报
回复
原来是这样子。。我明白了。。谢谢各位

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧