我有这个代码循环遍历列表并将其发布在选项标记中。但每当我尝试运行它时,我都会得到一个未定义的偏移通知。
<?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>
我该如何解决这个问题?有没有更好的方法呢?
答案 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