在 PHP 中遍历数组时出现“undefined offset notice”的通知

5

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

<?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个回答

8

问题出在您使用的是 <= 而不是 <。对于数组,sizeof(count) 的值总是比最高索引号多1。这是因为索引号从0开始计数,但实际元素个数是该数字加1,而人类的计数方式是从1开始。

您也可以使用 foreach 来遍历数组。

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

关于使用for的一个侧面说明,将sizeof()放在for循环条件中效率较低。这是因为PHP在每次循环时都要计算数量。将sizeof结果赋值给变量并与之比较更有效。


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; ?>

哦...有些人对问题有很多解决方案。PHP专家。 - Zacky112

1

应该使用 < 程序符号。或者可以使用 foreach 循环:

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

0
问题在于,如果您有一个包含10个元素的数组,它从0开始。Sizeof将返回10,数组将有10个元素,从0到9。数组中的最后一个元素应该比数组的sizeof少1。因此,for循环应该是: for($d=0;$d<sizeof($datearray);$d++)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接