1

最初の while ループが実行された後、 foreach ループ内の配列が設定解除されます (または、少なくとも配列ではなくなります)。

私が向かっているのは、開始日から毎日表示される棒グラフのデータの配列と、各日の種類別 (8 種類) のクリック数です。そのため、開始日から現在までの日数を計算しています。毎日、最初の配列をチェックして、その日にあったクリックの数 (ある場合) と、クリックの種類を確認します。

関連するコードは次のとおりです...

$i=0;
while($i<=$numdays)
{
echo $date2->format('Y-m-d') . "<br>";

foreach($clicklist as $key => $clicklist)   {
      if ( $clicklist[clickdate] === $date2 ) {
      echo $clicklist[clicks]." clicks on ".$clicklist[type]." on that date<br>";
        }
       }

$date2->modify('+1 day');
$i++;
echo is_array($clicklist) ? 'Array<br>' : 'not an Array<br>';
}

$numdays は startdate から現在までの日数です (チャート変数の 1 つに必要です。$date2 は startdate で、$clicklist はデータベースからのクリック/日付/タイプの配列です。すべてのランダムなエコーはちょうどそうです何が起こっているかを見ることができます - または場合によってはそうではありません。

while ループは正常に機能しますが、分離は foreach ループも (変数の代わりに静的な日付を使用して) while ループの外でも正常に機能しますが、もちろん、それは 1 回だけの実行です。

マニュアルによると、 foreach はポインターを自動的に最初にリセットするため、問題はありません。

明らかな何かが欠けていると確信しています..どんなガイダンスも大歓迎です。

4

1 に答える 1

2
foreach($clicklist as $key => $clicklist)

あなたの問題があるところです。名前を再使用しないでください。次のように変更してください。

foreach($clicklist as $key => $cl)

そうしないと、ループの終わりまでに、反復された最後の要素として $clicklist が上書きされます。


編集:関連する注意事項として、 in などの引用符なしで配列にアクセスしないでください$clicklist[clickdate]。同じ名前で定義された定数に遭遇した場合、これは後でバグに変わる可能性があります。$clicklist['clickdate']代わりに使用してください。

于 2013-06-28T04:44:55.217 に答える