简体   繁体   中英

php while loop addtitional condition not behaving as expected

I have this piece of code:

        $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++;
        }

But when I add a second condition to the while loop the $row variable becomes a boolean true :

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

First php error message: Warning: array_search() expects parameter 2 to be array, boolean given in C:\\wamp32bit\\www\\monitor\\templates\\mainContent.php on line 133

I have searched for this problem but all of them were related to wrong syntax or the conditions excluding each other.

Why does this happen?

Your problem here is just syntax, that way you are assigning always a boolean value to the $row.

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

The right way to do this is

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

In the last case you can put an if statment inside the loop, like this:

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

你为什么不试试这个?

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

Another way you could do it would be :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM