1

3 または 5 で割り切れるすべての数値を見つけて配列にダンプし、すべての値を加算する PHP スクリプトを実行しようとしています。しかし、いざ実行してみると数値出力(正しいかどうかわかりません)と数百のエラーが出ます。それらは次のように始まります。

注意: 未定義のオフセット: G:\Computer Stuff\WampServer\wamp\www\findthreesandfives.php の 18 行目の 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;、同じ機能を提供するより単純な代替手段として使用することを提案しました。

EDIT 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 に答える