2

我有一个while/for循环,foreach里面有一个循环。阅读代码将使我在逻辑方面尝试实现的目标不言自明。

用外行的话来说,我正在尝试用 PHP 创建一个日历。该foreach语句创建 35 个单元格,用于日历界面,4 周,7 天,5 x 7 = 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>';
    } 
}

我不太确定为什么你需要做两个循环,你可以用一个来完成(除非你确实需要循环$this->cells,在这种情况下忽略这个答案:p)

于 2012-04-30T12:53:28.343 回答