我想问一下以下这段代码为什么会输出这样的结果?不是应该全部为空吗?
$a1=array(0=>dog,1=>cat,2=>horse,3=>bird);
for ($i = 0; $i cat [1] => bird ) php
分享到: dog,1=>cat,2=>horse,3=>bird);for?($i?=?0;?$i?
------解决方案--------------------
模拟下过程
第一次循环 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 不符合循环条件 循环退出
------解决方案--------------------
自己看$a1=array(0=>dog,1=>cat,2=>horse,3=>bird);
for ($i = 0; $i cat [1] => horse [2] => bird )
i=1 array ( [0] => cat [1] => bird )
array ( [0] => cat [1] => bird )
问题在于你的起点不对
------解决方案--------------------
这个不难理解吧
count($a1)每次array_splice移除之后都在变化
$a1=array(0=>dog,1=>cat,2=>horse,3=>bird);
for ($i = 0; $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);
------解决方案--------------------
这里你要注意count($a1),每次循环都要计算一次,但是每次里面的元素都在减少一个,到第三次次循环的时候,元素个数和$i都是2,所以就结束了,所以肯定会剩下两个元素的,即使你把count提出来,即这里直接写4,也肯定有剩余吧,虽然我没有去写写看,但是这里的$i是不断增加的,而第三次循环时,元素还有2个,而已经没有了第三个位置,所以肯定有剩余,你可以在for循环的最后输出下这个$a1,看一下每次都变成了什么,为什么