在php中循环遍历数组时的未定义偏移通知

时间:2010-07-13 06:13:52

标签: php arrays

我有这个代码循环遍历列表并将其发布在选项标记中。但每当我尝试运行它时,我都会得到一个未定义的偏移通知。

<?php $datearray=array('Jan','Feb','Mar'); ?>

<?php for($d=0;$d<=sizeof($datearray);$d++){ ?>
  <select title="mm" name="month" id="month" class=""> 


                          <option><?php echo $datearray[$d]; ?></option>
                          <?php } ?>

     </select> 

我该如何解决这个问题?有没有更好的方法呢?

4 个答案:

答案 0 :(得分:7)

这是因为您正在使用&lt; =而不是&lt;。数组的sizeof(count)总是比最高索引的数量多一个。这是因为索引当然从0开始,但计数是实际数字 - 人数从1开始计算。

您还可以使用foreach迭代数组。

<?php foreach($datearray as $date){ ?>
      <option><?php echo $date; ?></option>
<?php } ?>

作为关于for使用的附注,将sizeof()放入for循环条件效率较低。这是因为PHP计算每个循环的计数。将sizeof结果分配给变量并与之进行比较效果更好。

答案 1 :(得分:2)

如何解决它...通过学习如何扫描从零开始的数组

您不能将$index<=$length用作条件。

改为使用$index<$length

<?php for($d=0;$d<sizeof($datearray);$d++){ ?>
               ^^^^^

是的,有更好的方法:

<?php foreach($datearray as $date){ ?>

<?php echo $date;?>

<?php } ?>

更好的一个:( PHP endfor / endforeach 语法)

<?php foreach($datearray as $date): ?>

<?php echo $date;?>

<?php endforeach; ?>

答案 2 :(得分:1)

应该是&lt;。或者使用foreach循环:

foreach($datearray as $month)
{
...
}

答案 3 :(得分:0)

问题是,如果你有一个包含10个元素的数组,它从0开始.Tizeof将返回10,数组将有10个元素,0到9.数组中的最后一个元素应该比{1小1 {1}}数组。所以for循环应该是: sizeof