1

我正在尝试运行一个 PHP 脚本来查找所有可被 3 或 5 整除的数字,将它们转储到一个数组中,然后将所有值相加。但是,当我尝试运行它时,我得到一个数字输出(我不知道它是否正确)和数百个错误。他们开始于:

注意:未定义的偏移量:第 18 行 G:\Computer Stuff\WampServer\wamp\www\findthreesandfives.php 中的 1

然后偏移量以 1-3 的增量增加(随机的,我还没有看到模式)。我不知道出了什么问题。这是我的代码:

<?php
function loop($x)
{
$a = array(); //array of values divisible by 3 or 5
$l = 0; //length of the array
$e = 0; //sum of all the values in the array
for ($i=0; $i<=$x; $i++){ //this for loop creates the array
    $n3=$i%3; 
    $n5=$i%5;
    if($n3 === 0 || $n5 === 0){
        $a[$i]=$i;
        $l++;
    }


}
for ($v=0; $v<=$l; $v++){ //this loop adds each value of the array to the total value
    $e=$e + $a[$v];
}
return $e;   
}
echo loop(1000);
?>

有人请帮助...

4

2 回答 2

4

您的代码中的问题是以下行:

$a[$i]=$i;

应该:

$a[count($a)] = $i;

这是因为 的值$i总是在增加,所以使用$i指针会在数组的索引中产生间隙。 count($a)返回给定数组中的项目总数,这也恰好是下一个索引。

编辑: @pebbl 建议使用$a[] = $i;作为提供相同功能的更简单的替代方案。

编辑2:解决评论中描述的OP的后续问题:

问题似乎$l是大于$a. 因此,count($a)在 for 循环中使用应该可以修复您随后的错误。

尝试更换:

for ($v=0; $v<=$l; $v++){

和:

for ($v=0; $v<=count($a); $v++){
于 2012-10-09T00:25:40.100 回答
2

我发现了与@zsnow 说的相同的问题。$a 内有缺口。该if条件允许使分配跳过某些索引的间隙。你也可以使用这个

foreach ($a as $v){ //this loop adds each value of the array to the total value
    $e=$e + $a[$v];
}

实际上应该是

foreach ($a as $v){ //this loop adds each value of the array to the total value
    $e=$e + $v;
}
于 2012-10-09T00:37:20.340 回答