'if' inside 'while' утверждение в php - PullRequest
2 голосов
/ 28 июля 2010

У меня есть этот фрагмент кода, который циклически перебирает массив и выводит результат на страницу следующим образом:

while($row = mysqli_fetch_array($result)) {

        echo '<tr><td><a target="_blank" href="' . $row['url'] . '">' . $row['name'] . '</a></td>' . '<td>' . $row['provider'] . '</td>' . '<td>' . $row['media'] . "</td></tr><br />\n";

        }

Он работает просто отлично, но я надеялся использовать оператор if для$ row ['media'], потому что он содержит некоторые значения NULL и некоторые результаты! NULL.

Я хотел бы иметь возможность отображать другой ответ, похожий на:

if ($ row ['media']! = NULL) {echo 'Нет';} else {echo $ row ['media'];}

Возможно ли это в этой ситуации?

Спасибо.

Ответы [ 13 ]

1 голос
/ 28 июля 2010

использование:

if ( is_null( $row['media'] ) ) { ... } else { ... }
1 голос
/ 28 июля 2010

Лучший способ сделать это - использовать троичные операторы :

while (whatever)
{
    echo 'foo'
        .($statement ? 'bar' : '')
        .'baz';

}
0 голосов
/ 28 июля 2010

Вы можете выразить это одним утверждением:

while ( $row = mysqli_fetch_array($result) ) {
    echo '<tr><td><a target="_blank" href="' . $row['url'] . '">' . $row['name'] . '</a></td>' .
         '<td>' . $row['provider'] . '</td>' .
         '<td>' . (is_null($row['media'])?"Invalid Value":$row['media']) . "</td></tr><br />\n";
}
0 голосов
/ 28 июля 2010

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

Кроме того, вам следует проверить утверждение if.Будьте осторожны с вашими условиями.

if ($row['media'] != NULL) {
    echo 'Nope';
} else {
    echo $row['media'];
}

Это выведет 'Нет', если $ row ['media'] равен , а не null.Я предполагаю, что вы хотите вывести «Nope», если $ row ['media'] равно нулю.В этом случае вы хотите использовать == вместо! =.

0 голосов
/ 28 июля 2010

Поместите значение в переменную temp перед эхом:

$mediaVal = $row['media'];

if ($mediaVal == NULL) $mediaVal = 'Nope';

echo '<tr><td><a target="_blank" href="' . $row['url'] . '">' . $row['name'] . '</a></td>' . '<td>' . $row['provider'] . '</td>' . '<td>' . $mediaVal . "</td></tr><br />\n";

Вы можете рассмотреть возможность разделения каждого поля в выделенную переменную, если вы захотите обработать их аналогичным образом и т. Д.

0 голосов
/ 28 июля 2010
while($row = mysqli_fetch_array($result)) {
    echo '<tr><td><a target="_blank" href="' . $row['url'] . '">' . 
         $row['name'] . '</a></td>' . '<td>' . $row['provider'] . 
         '</td>' . '<td>' . 
        ($row['media'] == NULL ? 'Not Assigned' : $row['media']). 
         "</td></tr><br />\n";

}
0 голосов
/ 28 июля 2010

Вы можете сделать что-то подобное в своем утверждении select

select

CASE
WHEN media IS NULL THEN 'Nope';
ELSE media
END as media

from

table
where......

Подробнее: Текст ссылки

0 голосов
/ 28 июля 2010

Почему бы не сделать это таким образом?

while($row = mysqli_fetch_array($result)) {

$media = ($row['media'] != NULL) ? $row['media'] : "Invalid";

echo '<tr><td><a target="_blank" href="' . $row['url'] . '">' . $row['name'] . '</a></td>' . '<td>' . $row['provider'] . '</td>' . '<td>' . $media . "</td></tr><br />\n";

}
0 голосов
/ 28 июля 2010

вы всегда можете просто использовать другую переменную и установить ее перед оператором echo, а затем использовать эту переменную в вашем выражении echo.если вам нужен однострочный, вы можете использовать сокращенный синтаксис, например, такой:

($row['media'] != null) ? 'Nope' : $row['media']

и вставить его там, где у вас сейчас есть $row['media']

0 голосов
/ 28 июля 2010

Если я понимаю ваш вопрос, тогда это должно работать нормально:

if(is_null($row['media']) echo($row['media']) else echo('Nope');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...