2015-07-21 1 views
1

J'ai ce morceau de code:php while condition addtitional ne se comporte pas comme prévu

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

Mais quand j'ajoute une deuxième condition à la boucle tandis que la variable $row devient un booléen true:

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

Premier message d'erreur PHP: Avertissement: array_search() s'attend à ce que le paramètre 2 soit un tableau, un booléen donné dans C: \ wamp32bit \ www \ monitor \ templates \ mainContent.php sur la ligne 133

J'ai cherché ce problème mais tous étaient liés à une mauvaise syntaxe ou aux conditions qui s'excluaient mutuellement.

Pourquoi cela se produit-il?

+0

Vous définissez i $ à 0, donc 0 est inférieur à 10. Ceci est vraiment vrai! BTW vous devriez poster tout le code dans la boucle. –

+0

@bub Mais pourquoi cela écrase-t-il la variable '$ row'? Il devrait écrire le tableau à '$ row' et voir si' $ i' est aussi plus petit que 10, non? – gergalyb

+0

S'il vous plaît poster le code de boucle entière –

Répondre

1

Votre problème ici est juste la syntaxe, de cette façon vous affectez toujours une valeur booléenne à la ligne $.

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

La bonne façon de le faire est

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

Dans le dernier cas, vous pouvez mettre un si statment dans la boucle, comme ceci:

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

0

pourquoi ne pas essayer ça?

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

+0

Ce sera la boucle interne plusieurs fois ce qui n'est pas ce que je veux, je veux plusieurs conditions dans une boucle – gergalyb

0

Une autre façon que vous pourriez le faire serait:

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

Le problème avec ceci est que sqlsrv_fetch_array renvoie un tableau et non un booléen – gergalyb

+0

Oui, auquel il attribue à la variable $ row. S'il n'y a plus de lignes à récupérer, l'instruction équivaudrait à false. Essayez-le, cela devrait fonctionner pour vous. –