php while while addtitional condition不按预期行事

时间:2015-07-21 13:32:56

标签: php loops while-loop multiple-conditions

我有这段代码:

        $i=0;
        while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
*(line 133)*    if (array_search("SUCCESS", $row) != false) {
                echo "<tr class='success'>";
            }
            elseif (array_search("ERROR", $row) != false) {
                echo "<tr class='danger'>";
            }
            else {
                echo "<tr>";
            }
                foreach ($row as $rowData) {
                    if ($rowData == "SUCCESS") {
                        echo "<td><span class='mdi-navigation-check'></span></td>";
                    }
                    elseif ($rowData == "ERROR") {
                        echo "<td><span class='mdi-navigation-close'></span></td>";
                    }
                    else {
                        if (gettype($rowData) == "object") {
                            echo "<td>" . $rowData->format('Y-m-d H:i:s') . "</td>";
                        } else {
                            echo "<td>" . $rowData . "</td>";
                        }
                    }
                }
                if (isset($row["cMsgID"])) {
                    echo "<td><a href='#' onclick='window.open(\"/monitor/templates/history.php?cMsgID=" . $row["cMsgID"] . "\", \"history\", \"status=1, toolbar=1 width=800px, height=400px\")'>History</a></td>";
                }
            echo "</tr>";
            $i++;
        }

但是当我向while循环添加第二个条件时,$row变量变为布尔true

$i
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) && $i < 10){
*same code as above*}

第一个php错误消息:警告:array_search()期望参数2为数组,布尔值在第133行的C:\ wamp32bit \ www \ monitor \ templates \ mainContent.php中给出

我已经搜索过这个问题,但所有问题都与错误的语法或相互排斥的条件有关。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

你的问题只是语法,你总是给$ row赋一个布尔值。

$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) && $i < 10

正确的方法是

($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) && $i < 10

在最后一种情况下,您可以在循环中放置if语句,如下所示:

$i=0 while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){ if ($i < 10) { *do something* } else { break; } }

答案 1 :(得分:0)

为什么不试试这个?

while($i < 10){ while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){ your code here; } }

答案 2 :(得分:0)

你能做到的另一种方式是:

$i=0;    
while (true == ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) && $i < 10) {
    *code*
    $i++;
}