好的,所以我在尝试编写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>';
}
?>
答案 0 :(得分: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;
答案 1 :(得分: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的定义应该是=
而不是-
。接下来,您的内部for
循环是奇数。
首次循环,$num
等于11
。在内部循环中设置$i = $num%3
$i = 2
。所以内部循环在$i++ < 3
时运行一次,回显的是一个星,并且增量计数一次。内部循环退出,您从$count
中减去$num
,使$num=10
和行完成,下一次外循环迭代。
下次内循环运行时,$num
为10,因此$i = $num%3
变为$i=1
。内循环在$i++ < 3
运行2次,回显2个星并且增加$ count两次使它现在变为3.在内循环之后你从$num
减去3个以使其成为7并且行结束,外循环继续。
下一个内循环,$num
为7,因此$i = $num%3
变为$i=1
。内循环在$i++ < 3
运行2次,回显2个星并且两次增加$ count使其成为现在5.在内循环之后从$num
减去5使其现在为2,行结束,外循环继续。
外部循环的最后一次迭代(行限制命中),$num
为2,因此$i = $num%3
变为$i=1
。内循环运行一次,回声的一个星和内部计数一旦现在成为8.内循环结束,你从$num
中减去8,使其现在为-6,行结束,外循环结束。
答案 2 :(得分: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>";
}
答案 3 :(得分:0)
哦,一个谜题!
我不知道使用for
是否是您的作业要求,我更喜欢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 --;
}
答案 4 :(得分:0)
我不明白为什么你必须使用两个for循环。
我会做这样的事情:(我注意到你的代码中没有<li>
个)当然你必须设置class =“缩略图”以包含list-style-type :无;
<?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>';
?>