PHP数组未设置

时间:2011-03-25 21:30:29

标签: php arrays unset array-unset

这里的代码(在php 5.3.5和5.2.13中执行):

$res = array(1, 2, 3);

unset($res[0]);

for($i = 0; $i < sizeof($res); $i++)
{
  echo $res[$i] . '<br />';
}

在结果中我看到了

<br />2<br />

为什么只有一个元素,并且首先为空?不明白。在做的时候:

print_r($res);

请参阅:

Array ( [1] => 2 [2] => 3 )

Thanx寻求帮助!

5 个答案:

答案 0 :(得分:8)

这是因为你从$i = 0;而不是1开始,这是新的第一个索引。最后一个元素缺失,因为它在第二个(前三个)元素之前停止,因为大小已经减少到2.这应该得到你想要的结果:

foreach($res as $value) {
    echo $value . '<br />';
}

答案 1 :(得分:3)

PHP不会在未设置时重新排列键。未设置后的密钥为12。在for循环中,i获取01值。使用此代码段,您应该将i初始化为1,即数组的第一个键。

提示1:使用foreach迭代数组。
提示2:不要使用别名。使用countsizeof个实例。

答案 2 :(得分:2)

因为unset sizeof array = 2

之后

并且基本上使用error_reporting(E_ALL)进行开发,它会帮助你

答案 3 :(得分:1)

这没有按预期工作,因为当你取消设置时,sizeof()会返回2.因此你循环0到小于2(又称1)。

因此它只显示索引1处的元素,因为您在0处取消了元素。

对此的一个简单修复是使用foreach循环:

foreach($res as $value){
    echo $value .'<br />';
}

答案 4 :(得分:1)

迭代2次,第一次通过它访问索引0,你已经取消设置,第二次访问索引1,这是你看到的输出。即使只有两个元素,索引1和2,你仍然从原始索引开始。