Хотя цикл не работает, как ожидалось, с переменной - PullRequest
1 голос
/ 29 января 2012

Следующий код работает нормально, когда я удаляю && $f<4, но с ним он не работает.

PHP:

$titles=array();
$f=0;
while ($row=mysql_fetch_assoc($query) && $f<4){  //this line doesn't work
        $titles[]=$row['questiontitle'];
            echo "<div class='questionPreview'>$titles[$f]</div>";
            $f++;
        }

Ответы [ 3 ]

5 голосов
/ 29 января 2012

Если я правильно вас истолковываю, я думаю, что у вас проблема с приоритетом. Попробуйте это:

while (($row=mysql_fetch_assoc($query)) && ($f<4)){
2 голосов
/ 29 января 2012

= has lower precedence than && .Это означает, что оператор && вычисляется первым.

Это означает, что ваш код, по сути, выглядит следующим образом:

while ($row = (mysql_fetch_assoc($query) && $f<4)){  //this line doesn't work

Итак, другими словами, выполните запрос MySQLи сравнение, и если они оба истинны, установите $row в true;в противном случае установите его на false.

. Необходимо использовать скобки, чтобы убедиться, что все операции выполнены правильно:

while (($row=mysql_fetch_assoc($query)) && ($f<4)){
1 голос
/ 29 января 2012

Это, вероятно, потому что $row - это true, а не массив:

$ php -r 'var_dump($row = pow(2,2) && true,$row);'
bool(true)
bool(true)
$ php -r 'var_dump($row = pow(2,2) && false,$row);'
bool(false)
bool(false)

(pow здесь - случайная функция)

Это потому, что &&имеет более высокий приоритет , чем =.Как всегда, решите с помощью ():

while ( ($row = mysql_fetch_assoc($query) ) && $f<4){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...