php while loop addititional не работает должным образом

У меня есть этот кусок кода:

        $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 будет массивом, логическое значение указывается в C: \ wamp32bit \ www \ monitor \ templates \ mainContent.php в строке 133

Я искал эту проблему, но все они были связаны с неправильным синтаксисом или условиями, исключающими друг друга.

Почему это происходит?

1

Решение

Ваша проблема здесь только в синтаксисе, поэтому вы всегда присваиваете логическое значение строке $.

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

Правильный способ сделать это

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

В последнем случае вы можете поместить if if внутри цикла, например:

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

1

Другие решения

почему бы тебе не попробовать это?

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

0

Еще один способ сделать это:

$i=0;
while (true == ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) && $i < 10) {
*code*
$i++;
}
0
По вопросам рекламы [email protected]