Задать вопрос
@GooseTheDestroyer

Где ошибка в switch-case?

Добрый вечер.
Подскажите где я ошибся пожалуйста. Изучаю switch-case.
Код:
$status = "";
$statusok = "Выполнен";
$statusbad = "Не выполнен";
switch ($mcg['klost'] && $mcg['slost']):
    case ($mcg['klost'] == 0 && $mcg['slost'] == 0): 
        $status = $statusok; break;
    default: 
        $status = $statusbad; break;
endswitch;
$smarty->assign('status', $status);


Как в моем понимании работает этот код.
Назначаем переменную $status - пустой строкой.
Объявляем переменные $statusok - "Выполнен" и $statusbad - "Не выполнен".
Выбираем для перебора значения из ассоциативного массива (объявлен ранее) $mcg столбец klost и $mcg столбец slost.
Проверяем на условие, что $mcg столбец klost равен 0 И $mcg столбец slost равен 0.
Присваем значение перемнной $status - $statusok.
В остальных случаях (т.е. если одно из значений не равно 0) переменной $status присваевается $statusbad.
Передаю переменную $status в Smarty.

Вывод в смарти осуществляется:
{$status}

Однако такой код присваивает ВСЕМ записям значение "Не выполнен", независимо от числа в $mcg['klost'] и $mcg['slost'].
Подозреваю, что неправильно написал условия для перебора.
Направьте на путь истинный пожалуйста.
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@dexes56
Back-end engineer
Интерпретатор подставит в switch результат выполнения $mcg['klost'] && $mcg['slost'], а он будет true или false. В итоге в рамках твоего примера это бессмысленно, если тебе нужно проверить две переменные, то используй if.

Код, аналогичный твоему, для понимания:
$status = '';
$statusok = 'Выполнен';
$statusbad = 'Не выполнен';
$something = $mcg['klost'] && $mcg['slost']; // в $something будет true или false, третьего не дано
$somethingElse = $mcg['klost'] == 0 && $mcg['slost'] == 0; // здесь то же самое, true или false

switch ($something):
    case ($somethingElse):
        $status = $statusok;
        break;
    default:
        $status = $statusbad;
        break;
endswitch;

$smarty->assign('status', $status);


Кстати, если у тебя в klost будет 1, а в slost будет 0, то в $something и $somethingElse будет false и в $status упадёт 'Выполнен'.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы