Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изменить if на switch, подскажите как это сделать 
:(
    Опции темы
djundead
Дата 23.3.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



Доброго времени суток!
Есть примерно следующая конструкция:
Код

...
        if (in_array("ключ1", $массив1))
        {
            действие;
        }
        if (in_array("ключ2", $массив1))
        {
            действие;
        }
        // редактирование
        if (in_array("ключ3", $массив1))
        {
            действие;
        }
...

Дело в том что ключей около 20 штук и собственно if'ов тоже столько же( попытался перенести это дело на switch, но не смог найти решения при использовании in_array // поиска ключа в массиве.
Покажите в какую сторону двигаться для нахождения решения (если это конечно возможно =) )
Заранее спасибо!

Это сообщение отредактировал(а) djundead - 23.3.2007, 23:38
PM MAIL   Вверх
Serkys
Дата 23.3.2007, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 4
Всего: 22



Лучше сделай через foreach().
Код

foreach ($massiv1 as $key => $value) {
  if (in_array($key, $massiv)) {
    действие;
  };
};

Если надо выполнять разные действия, то switch($key) вставляешь внутрь if().
Хотя хотелось бы задачу подробнее.
PM MAIL   Вверх
Nicholas_S
Дата 23.3.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 19



Опиши задачу подробнее.

Вообще достаточно странно, что данная конструкция работает, если под значением "ключX" понимается именно ключ ассоциативного массива, а не значение, которое требуется найти.


--------------------
...все в мире относительно
PM   Вверх
djundead
Дата 24.3.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.4.2006

Репутация: нет
Всего: нет



массив формируется из запроса к бд с применением explode:
Код

$this->service = explode(",", $this->sql->record['services']);

в итоге ищу по массиву значение:
Код

if (in_array("ключ1", $this->service))
{
// если нашли
   $this->parametr['ключ1'] = 1;
}
if (in_array("ключ2", $this->service))
{
// если нашли
   $this->parametr['ключ2'] = 1;
}
// и так 20 раз
Цитата

Опиши задачу подробнее.

Задача присвоить юзеру определенные метки в зависимости от выбранных им предпочтений
Цитата

если под значением "ключX" понимается именно ключ ассоциативного массива

Нет) Значение, просто немного стормозил =(

И еще вопрос, есть ли смысл переходить на switch? На сколько и главное чем полезнее использовать switch?

PM MAIL   Вверх
Serkys
Дата 24.3.2007, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 4
Всего: 22



Цитата(djundead @  24.3.2007,  00:01 Найти цитируемый пост)
На сколько и главное чем полезнее использовать switch?

Код красивее smile
Мне кажется switch полезен когда выбор идёт опираясь на само значение переменной, без всяких его преобразований.
Можете меня пиннать, но я не вижу ничего некрасивого во ифах. Свич очень узкоспециализированный, чтобы его подстроить под себя почти всегда надо прилагать слишком много усилий.
PM MAIL   Вверх
szz
Дата 24.3.2007, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



Цитата
И еще вопрос, есть ли смысл переходить на switch?

  Нету! Что тебе вообще свитч тут взъелся? Он подходит если ты откровенно сравниваешь переменную с разными значениями. 
  20 раз писать эту хрень тоже нет смысла, когда у тебя очевидно циклично можно пройти. 
разумеется тут нужен foreach, как подсказал Serkys.
   Вот тот же цикл, но с действием. После него результтат абсолютно такой же как и с 20-ю ифами:
Код

foreach ($this->service as $key => $value) {
  if (in_array($key, $this->service)) {
        $this->parametr[$key] = 1; // по-моему очень просто
  };
};


Цитата
Свич очень узкоспециализированный, чтобы его подстроить под себя почти всегда надо прилагать слишком много усилий. 

  Не, ну это неправда тоже. Довольно часто приходится сравнивать переменную с чем-то. Если сравнений больше двух, то не задумываясь используешь свитч.


--------------------
PM   Вверх
mclight
Дата 24.3.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: 1
Всего: 2



если уж так хочется поюзать switch,то 
Код

foreach($массив1 as $k=>$v)
    switch($k){
       case 'ключ1':kjsdfhkasjdfhaksdf;break;
       case 'ключ2':kjsdfhkasjdfhaksdf;break;
       case 'ключ3':kjsdfhkasjdfhaksdf;break;
    }

--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
Serkys
Дата 25.3.2007, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 4
Всего: 22



Цитата(szz @  24.3.2007,  06:44 Найти цитируемый пост)
 Не, ну это неправда тоже. Довольно часто приходится сравнивать переменную с чем-то. Если сравнений больше двух, то не задумываясь используешь свитч.

Я к тому, что на практике я очень редко сталкиваюсь с применением свитча. Редко бывает необходимость. Не знаю как у других, но у меня так.
PM MAIL   Вверх
SelenIT
Дата 25.3.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



По-моему, тут вообще можно заюзать array_intersect($массив_для_сравнения, $массив_из_базы) и потом смело фигачить все элементы из результата в эти самые предпочтения многострадального юзера, обойдясь без каких-либо проверок внутри цикла. smile

А вот это
Цитата(djundead @  24.3.2007,  00:01 Найти цитируемый пост)
массив формируется из запроса к бд с применением explode:

имхо, говорит о слегка неправильном проектировании БД (нормализация хромает)...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.