Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как задать условие с несколькими значениями?


Автор: andro_id 16.5.2007, 19:41
Есть конструкция:
Код

if($query_data["device_status"] == 'В ремонте') {
        $bgcolor = '#FF8533';
    } else {
        $bgcolor = '';
    }

А как сделать подсветку если статусов не 1, а 5? Не громоздить же 5 таких условий.
Можно конечно прописать в базе, но это добавит лишний запрос. Думаю есть более простой способ, о котором я не знаю. Подскажите пожалуйста.

Автор: WolfON 16.5.2007, 19:51
Код

$statuses = array('В ремонте', 'Работает', 'С3.14зжено');
$bgcolor = '';
if (array_search($query_data["device_status"],$statuses) !== false)
  $bgcolor = '#FF8533';

Нэ? smile 

Автор: CyClon 16.5.2007, 21:04
array_search возвращает ключ... Если он не нужен, нужно юзать in_array.

По сабжу, есть операторы AND и &&.

Например, if ($var == 1 && $var2 == 2 && $var3 == 3) { ... }.

Автор: andro_id 16.5.2007, 22:05
WolfON, немного не понял это
Код

$statuses = array('В ремонте', 'Работает', 'С3.14зжено');
$bgcolor = '';
if (array_search($query_data["device_status"],$statuses) !== false)
  $bgcolor = '#FF8533';

 суть в том, что каждому статусу должен соответствовать свой цвет. Я предполагал, что можно как-то прикрутить массив, но пока не знаю как.

Автор: CyClon 16.5.2007, 22:11
Код
<?php

$info['red'] = 'В ремонте';
$info['green'] = 'Готов';
$info['blue'] = 'Обработка заказа';

if ($color = array_search($query_data['device_status'], $info)) {
    $bgcolor = $color;
} else {
    $bgcolor = '';
}

?>

Автор: andro_id 16.5.2007, 22:27
CyClon, ага, наверное так. Спасибо. Завтра попробую.

З.Ы.: эх, постов маловато, не могу пока плюс поставить.

Автор: teroni 16.5.2007, 23:23
Код
<?php
$color['В ремонте'] = 'red';
$color['Готов'] = 'green';
$color['Обработка заказа'] = 'blue';

$bgcolor = (@isset($color[$device_status])) ? $color[$device_status] : '';
?> 

По-простому smile

Автор: BuShaRt 17.5.2007, 00:26
teroni, 
@isset - это что за извращение?

Автор: teroni 17.5.2007, 00:38
Это чтобы не ошибки не было если $device_status не установлена. Если есть уверенность, что оно установлено, то собаку можно убрать.

Автор: BuShaRt 17.5.2007, 01:02
teroni, 
isset тогда на что?
Ладно мы http://forum.vingrad.ru/forum/topic-149366/anchor-entry1122396/45.html#st_0 с GZep спорили, что юзать isset или @, но вот, чтоб @isset - это нечто совсем новенькое smile

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

Автор: teroni 17.5.2007, 01:19
Хотите сказать, что isset($color[$device_status]) не выдаст ошибку при неустановленном $device_status? smile 
Точно, здесь правильнее isset($color[@$device_status]) будет. 
Но все же думаю, что $device_status будет установлен полюбому, поэтому собаки можно выкинуть.

Автор: skyboy 17.5.2007, 01:50
teroni, ошибку(error) и предупреждение(warning) - нет, не выдаст. подсказку(notice) - выдаст. если мне память не изменяет.
С другой стороны, раз тут уже споры о смысле жизни пошли и мой троллинг ничего не испортит переменные лучше инициализировать дефолтнымии значениями, а потом уже перекрывать их значениями из $_GET/$_POST. А то получается, что надо вывести статус, а статус неопределен... Так зачем его тогда надо было выводить?! smile
А насчет хранения в БД: смотри сам, andro_id, но потенциально один запрос(если результаты потом тихонько закешировать) погоды может и не сделать, зато редактировать список статусов можно будет через какую-нить админку, а в случае использования (только)массива придется переписывать РНР-файл...

Автор: BuShaRt 17.5.2007, 07:35
teroni,
Извините, а почему наличие массива $color вы проверяете на наличие, а от ошибок пре возможной нообъявленой переменной $device_status решили откреститься?

Автор: teroni 17.5.2007, 11:19
Вопроса не понял. Вроде бы все, что надо по теме, я уже написал.

Автор: andro_id 17.5.2007, 12:16
CyClon, спасибо. Всё работает.

skyboy, 
Цитата

А насчет хранения в БД: смотри сам, andro_id, но потенциально один запрос(если результаты потом тихонько закешировать) погоды может и не сделать, зато редактировать список статусов можно будет через какую-нить админку, а в случае использования (только)массива придется переписывать РНР-файл...


Было бы интереснее и правильнее сделать так, но думать, как это реализовать некогда. Надо чтобы уже работало. Пока собираю всё из кубиков, потом (по мере изучения PHP) буду обрабатывать напильником.

Спасибо всем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)