Php switch语句的奇怪行为(以动态数字为例)
我在PHP中的while循环中使用的switch语句的行为非常奇怪 因此,我重写了之前在Php switch语句的奇怪行为(以动态数字为例),php,while-loop,switch-statement,Php,While Loop,Switch Statement,我在PHP中的while循环中使用的switch语句的行为非常奇怪 因此,我重写了之前在if-else-if语句中编写的一些代码,我决定(请原谅这个双关语)切换到switch语句 此代码尤其位于循环中,而循环中的代码如下所示: <? $ret = $db->query("SELECT * from teammates WHERE `current_team`='$lineID';"); $loop = 1; while($row = $ret->fet
if-else-if
语句中编写的一些代码,我决定(请原谅这个双关语)切换到switch
语句
此代码尤其位于循环中,而循环中的代码如下所示:
<?
$ret = $db->query("SELECT * from teammates WHERE `current_team`='$lineID';");
$loop = 1;
while($row = $ret->fetchArray(SQLITE3_ASSOC)) {
switch($loop) {
case 5:
echo "</div>";
$loop = 1;
break;
case 1:
echo "<div class='row'>";
break;
default:
$loop++;
}
echo "<div class='col-lg-3'>";
echo " <img src='somesite.com/somepicture.png"></img>;
echo "</div>";
$loop++;
}
?>
您正在按2的顺序计数。您可以在同一个循环中增加两次$loop
尝试一个简化版本
<?php
$loop = 1;
do {
echo "$loop ";
switch($loop) {
case 5:
echo "CLOSE>";
$loop = 1;
break;
case 1:
echo "<OPEN";
break;
default:
$loop++;
}
$loop++;
} while ($loop < 50);
die('eof');
您可能希望添加一个结束行div,或者如果后面没有更多的列,则防止将其回显。模数%
操作符是一种很好的方法,可以对交替行进行着色,创建这样的网格,或者对采访中经常询问的场景进行编码。如果您还不清楚任何事情,请发表评论
或者,特别是您提供的:
<?php
$ret = $db->query("SELECT * from teammates WHERE `current_team`='$lineID';");
$loop = 0;
echo "<div class='row'>";
while($row = $ret->fetchArray(SQLITE3_ASSOC)) {
$loop++;
if ($loop % 5 === 0) {
echo "</div>";
echo "<div class='row'>"; //***
}
echo "<div class='col-lg-3'>";
echo " <img src='somesite.com/somepicture.png'/>";
echo "</div>";
}
echo "</div>";
?>
乍一看,我认为这是因为当$loop
为5时,在关闭前一个
之后,您没有添加新的
。如果删除中断,会发生什么情况代码>用于案例5,因此它进入案例1,并添加了一个新的
?比以往更糟糕的嘶嘶声;)@里克登哈恩:这完全有道理,但为什么第二次增量解决了这个问题?这是偶然的。就像@ficuscr所说的,当$loop
超过1时,您将增加两倍,因此它永远不会达到情况5
,也永远不会重置回1。您使用的是Bootstrap,并且您的div具有col-lg-3
类,而且由于Bootstrap使用的网格大小为12,因此在第四个div之后,它似乎会自动换行,即使您尚未关闭行
div。@rickdenhaan啊,好的!我将尝试删除案例5中的中断,可能会研究ficuscr推荐的模数解决方案。我的问题是为什么我必须增加两次,删除一个中断显示的增量。我不知道如何用模来做这个?我同意你从0开始。当我编写最初的代码时,我想确保我做得正确,而不是从1开始思考。我想我现在应该把它修好,尽管没问题。给我一点时间,我会用这种方法重写它。我对它的工作原理很困惑,因为我不明白当旧div关闭时它是如何开始新的一行的?哎呀。在最后一个例子中,我忘了打开它,试图与您提供的代码相匹配:)请参见注释/***
。。。所以开始循环打开一行,点击列计数去标记器,基本上做一个回车。。。关闭循环末尾的尾随行。唯一的问题。。。如果你不解释的话,最后可能会有一个空行(如果结果是5的倍数)。在这个主题的搜索中使用“模数”作为关键字,应该会有助于获得好的结果。。。不过是相同的变体。
<?php
$ret = $db->query("SELECT * from teammates WHERE `current_team`='$lineID';");
$loop = 0;
echo "<div class='row'>";
while($row = $ret->fetchArray(SQLITE3_ASSOC)) {
$loop++;
if ($loop % 5 === 0) {
echo "</div>";
echo "<div class='row'>"; //***
}
echo "<div class='col-lg-3'>";
echo " <img src='somesite.com/somepicture.png'/>";
echo "</div>";
}
echo "</div>";
?>