php while 循环附加条件未按预期运行
php while loop addtitional condition not behaving as expected
我有这段代码:
$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.[=29= 中给出的布尔值] 第 133 行
我已经搜索过这个问题,但都是与错误的语法或条件相互排斥有关。
为什么会这样?
你的问题只是语法问题,这样你总是为 $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;
}
}
你为什么不试试这个?
while($i < 10){
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
your code here;
}
}
另一种方法是:
$i=0;
while (true == ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) && $i < 10) {
*code*
$i++;
}
我有这段代码:
$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.[=29= 中给出的布尔值] 第 133 行
我已经搜索过这个问题,但都是与错误的语法或条件相互排斥有关。
为什么会这样?
你的问题只是语法问题,这样你总是为 $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;
}
}
你为什么不试试这个?
while($i < 10){
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
your code here;
}
}
另一种方法是:
$i=0;
while (true == ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) && $i < 10) {
*code*
$i++;
}