2

内部にwhile/forループがあるループがあります。foreachコードを読むと、ロジックの観点から私が何を達成しようとしているのかが自明になります。

素人の言葉で言えば、私はPHPでカレンダーを作成しようとしています。foreachステートメントは、カレンダーインターフェイス用に、4週間、7日間、5 x 7=35の35個のセルを作成します。

ループは4月(30)のwhile日数を要し、各セルで1〜30の範囲をそれぞれ試行しています。

ただし、以下のコードを実装すると、各数値が30回繰り返されます。

$i = 1;
while ($i <= 30){
    foreach ($this->cells as $cells){
        foreach ($cells as $key => $object){
            echo "<td>" . $i . "</td>";                     
            if($object % 7 == 0){
                echo "</tr><tr>";
            }
        }  
    }
    $i++;   
}

私はこれを試しました:

$i = 1;
while ($i <= 30){
    foreach ($this->cells as $cells){
        foreach ($cells as $key => $object){
            echo "<td>" . $i . "</td>";  $i++;                              
            if($object % 7 == 0){
                echo "</tr><tr>";
            }
        }  
    }

}

1〜30を何度も出力する代わりに、1〜30だけが必要な場合は、1〜35を出力します。

forループを試した結果、各数値の多くが出力されました。ループコードの場合:

for ($i = 1; $i <= 30; $i++){
                foreach ($this->cells as $cells){
                    foreach ($cells as $key => $object){
                echo "<td>" . $i . "</td>";             
                if($object % 7 == 0){
                    echo "</tr><tr>";
                }
                    }  
                }   
            }   

$this->cells配列内の範囲は1〜35です

4

2 に答える 2

2
$i=0;
foreach ($this->cells as $cells){
    foreach ($cells as $key => $object){
        if($i<=30)
            echo "<td>" . $i . "</td>";
        $i++;                              
        if($object % 7 == 0){
            echo "</tr><tr>";
        }
    }
}  

このコードを試してください

于 2012-04-30T12:45:03.287 に答える
1
$i=0;
while ($i++ < 35){
    echo '<td>' . ($i <= 30 ? $i : '&nbsp;') . '</td>';
    if($i % 7 == 0) {
        echo '</tr><tr>';
    } 
}

なぜ2つのループを実行する必要があるのか​​よくわかりませんが、すべてを1つで実行できます(ループする必要がない場合は$this->cells、この回答を無視してください:p)

于 2012-04-30T12:53:28.343 に答える