2

这里的代码(在 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 )

感谢您的帮助!

4

5 回答 5

8

这是因为您$i = 0;从新的第一个索引而不是 1 开始。最后一个元素丢失了,因为它在第二个(之前的第三个)元素之前停止,因为大小已减小到 2。这应该会得到您希望的结果:

foreach($res as $value) {
    echo $value . '<br />';
}
于 2011-03-25T21:33:46.407 回答
3

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

提示 1:使用foreach 遍历数组。
提示 2:不要使用别名。使用count代替sizeof

于 2011-03-25T21:36:14.380 回答
2

因为在unsetsizeof array = 2之后

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

于 2011-03-25T21:33:46.673 回答
1

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

所以它只会显示索引 1 处的元素,因为你取消了 0 处的元素。

一个简单的解决方法是使用 foreach 循环:

foreach($res as $value){
    echo $value .'<br />';
}
于 2011-03-25T21:35:27.870 回答
1

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

于 2011-03-25T21:36:31.060 回答