2012-10-09 140 views
1

我试图运行一个PHP脚本,查找所有可以被3或5整除的数字,将它们转储到数组中,并将所有值一起添加。但是,当我尝试运行它时,会得到一个数字输出(我不知道它是否正确)以及几百个错误。而是先有自己:PHP未定义偏移错误重复

注意:未定义偏移:1 G:\计算机东西\ WampServer \瓦帕\ WWW \ findthreesandfives.php上线18

然后由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

在你的代码的问题是以下行:

$a[$i]=$i; 

应该是:

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

这是因为$i的值始终在增加,所以使用$i作为指针将在数组指数中造成空白。 count($a)返回给定数组中的项目总数,这也恰好是下一个索引。

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

编辑2:解决后续问题,在注释中描述的OP:

这个问题似乎是$l$a项目的数量更大。因此,在for循环中使用count($a)应该修复您的后续错误。

尝试更换:

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

有了:

for ($v=0; $v<=count($a); $v++){ 
+4

+1为正确答案:)但是它更容易编写'$ A [] = $ I;'在PHP,因为PHP会处理增加您的索引。 – Pebbl

+0

好吧,那工作..除了现在它只是给这个错误(和更大的最终数字)注意:未定义的偏移量:468在G:\电脑东西\ WampServer \ wamp \ www \ findthreesandfives.php在线18 – NinJoel

+0

'$ a [] = $ i;'如果OP仍然想维护索引序列 - 没有差距,则更安全 – codingbiz

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; 
} 
+1

+ 1作为另一个工作答案。 foreach构造处理这种奇妙的情况......但是留下一个这样的缺乏索引的索引只会导致后面的问题。不好的做法,imo。 – anditpainsme

+0

好吧..我试过了,但现在它给出了相同的错误模式(在我尝试了第一种解决方案之后),但它从偏移量468开始,这是最后一个错误流结束的位置。 – NinJoel