1

好的,所以我在尝试编写 5x3 星形图案时遇到了一个独特的问题。我可以执行 for 循环来获得 5x3,这很容易。但是我需要不同于正方形的东西。

我们最多可以有 15 颗星。所以打印出一个完整的块看起来像这样:

* * *
* * *
* * *
* * *
* * *

但是我们可以传入一个参数来表示我们想要的星数。所以让我们传入 11 而不是 15。我们应该得到:

* * *
* * *
* * *
* *

但是,以 11 作为我的参数,输出是这样的:

* 
* *
* *
*

它用不正确的星数打印出正确的行数。我知道这是为什么,这是因为我的代码中的模数。我还尝试了一种不同的方法,它打印出的行比需要的少。我被困住了,不知道从这里去哪里。

这是我的代码:

<?php
    $num = 11;
    $rows = ceil($num/3);
    $count - 0;
    for($j = 0; $j < $rows; $j++){
        echo '<div class="row-fluid"><ul class="thumbnails">';
        for($i = $num%3; $i < 3; $i++){
            echo '*';
            $count++;
        }
        $num-=$count;
        echo '</ul></div>';
     }
?>
4

5 回答 5

0

我不明白为什么你必须使用两个 for 循环。

我会做这样的事情:(我注意到您的代码中没有任何<li>'s)当然,您必须将 class="thumbnails" 设置为包含 list-style-type:none;

<?php
    $num = 11;
    $cols = 3;

    echo '<div class="row-fluid"><ul class="thumbnails">';
    $count = 0;
    for($j = 0; $j < $num; $j++){
        $count++;

        echo '<li style="float:left;">*</li>';
        if ($count>=$cols) {
            $count = 0;
            echo '<li style="clear:both;"></li>';
        }

     }
     echo '</ul></div>';
?>
于 2013-04-24T22:52:59.603 回答
0

哦,一个难题!

我不知道 usingfor是否是您作业的要求,我更喜欢while.

 $num_of_stars = 15;
 $stars_per_row = 3;
 while($num_of_stars > 0){
    echo "*";
    if($stars_per_row == 1){
        $stars_per_row = 3;
        echo "<br />";
    }else{
        $stars_per_row --;
    }
    $num_of_stars --;
 }
于 2013-04-24T22:47:42.053 回答
0

使用一些简单的 PHP-Fu:

$stars = 11;
$row_length = 3;


$array = array_fill(0, $stars, '*');
$array = array_chunk($array, $row_length);

$table = '<table border="0">';
foreach($array as $row){
    $table .= '<tr><td>'. implode('</td><td>', $row) .'</td></tr>';
}
$table .= '</table>';

echo $table;

在线演示

于 2013-04-24T22:35:03.143 回答
0

为此,这就是您所需要的。

$num = 11;
$cols = 3;
$rows = ceil($num/$cols);

for($j=0;$j<$rows;$j++)
    echo "<div class='row'>";
    for($i=0;$i<$cols;$i++){
        echo "*";
    }
    echo "</div>";
}

显示你在代码中出错的地方。首先,您对 $count 的定义应该是=not -。接下来,您的内部for循环很奇怪。

第一次循环,$num等于11。在您的内部循环中,您设置$i = $num%3which is $i = 2。所以内部循环运行一次 while $i++ < 3, echo 的一颗星并递增 count 一次。$count内循环退出,您从$num制作中减去$num=10并且行完成,下一个外循环迭代。

下一次内部循环运行时,$num是 10 所以$i = $num%3变成$i=1。内部循环运行 2 次 while $i++ < 3,回显 2 颗星并增加 $count 两次使其现在 3. 在内循环之后,您从$num7 和行结束中再减去 3,外循环继续。

下一个内部循环,$num是 7 所以$i = $num%3变成$i=1。内循环运行 2 次 while $i++ < 3,再回显 2 颗星并增加 $count 两次使其现在为 5。在内循环之后,您从$num现在为 2 中减去 5,行结束,外循环继续。

外循环的最后一次迭代(行限制命中)$num是 2 所以$i = $num%3变成$i=1. 内循环运行一次,回声的一颗星和内循环计数一次,现在是 8。内循环结束,你从$num现在 -6 中减去 8,行结束,外循环结束。

于 2013-04-24T22:36:19.523 回答
0

这个想法应该很简单:继续绘制直到达到目标数字。

所以你可以这样做:

$num = 11;
for( $i=0; $i<$num; $i+=3) {
    echo "<div class=\"row-fluid\"><ul class=\"thumbnails\">";
    for( $j=0; $j<3 && $i+$j<$num; $j++) {
        echo "*";
    }
    for( ; $j<3; $j++) { // finish the current row (optional, remove if not needed)
        echo " ";
    }
    echo "</ul></div>";
}
于 2013-04-24T22:39:58.070 回答