Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php switch语句的奇怪行为(以动态数字为例)_Php_While Loop_Switch Statement - Fatal编程技术网

Php 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

我在PHP中的while循环中使用的switch语句的行为非常奇怪

因此,我重写了之前在
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>";
?>