我在PHP中的while循环中使用的switch语句中得到了非常奇怪的行为。
所以我之前用if-else if
语句写了一些代码,我决定(原谅双关语)切换到switch
语句。
此代码尤其位于while
循环内,如下所示:
<?
$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++;
}
?>
现在,此代码 正常工作 ,但是,我遇到了一些奇怪的行为,我真的很想知道它为什么会发生。
此代码拍摄一些图像,将其中的4个连续放入,然后开始一个新行,直到显示所有图像。基本上给我一个包含4列图像的页面。
正如您在我的代码中所看到的,有两个部分可以增加$loop
变量。当我删除这些增量中的任何一个时,会发生奇怪的行为。
以下是一些行为图片(我很乐意提供所需的任何其他信息)
BOTH 增量:
缺少第二次增量:
缺少开关增量:
答案 0 :(得分:1)
你算两个人。你在同一个循环中增加$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');
<OPEN2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 eof
我说重构它。请尝试使用模数函数。认为它看起来会更好。同样$loop = 0;
是我喜欢在可能的情况下开始计算的东西。
看看以下内容:
$i = 0;
echo '<div class="row">';
do {
$i++;
echo '<div class="col-lg-3"><img src="somesite.com/somepicture.png" /></div>';
if ($i % 5 === 0) {
echo '</div>' . PHP_EOL . PHP_EOL; //close row - new line for readability here
echo '<div class="row">';
}
} while ($i < 50);
如果不再需要更多列,您可能希望添加一个结束行div或阻止将其回显。模数%
运算符是一种很好的方法,可以执行诸如遮蔽备用行,创建这样的网格或编写通常在采访中询问的"fizz-buzz"场景的方法。如果您仍然不清楚,请发表评论。
或者,具体如您提供的那样:
<?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>";
?>