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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> switch -> case (1..5) 
:(
    Опции темы
Wowa
Дата 13.9.2004, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Данный синтакси правильный, но работает, не так, как надо:
Код
switch ($i) {
case 0:
  echo "i equals 0-5";
  break;
case 5:
  echo "i equals 5-10";
  break;
case 10:
  echo "i equals 10-100";
  break;
}


А вот этот неправильный, но по нему видно, то, что я хочу smile.gif

Код
switch ($i) {
case (0..5):
  echo "i equals 0-5";
  break;
case (5..10):
  echo "i equals 5-10";
  break;
case (10..100):
  echo "i equals 10-100";
  break;
}


подскажите, как это реализовать smile.gif На делфи такое имхо прокатывало.
PM WWW   Вверх
Akina
Дата 13.9.2004, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Никак. Только цепью If-ElseIf-EndIf. У РНР отсутствует сравнение в CASE иначе как на равенство.

PS. Впрочем это тоже не будет эквивалентно...

Это сообщение отредактировал(а) Akina - 13.9.2004, 19:41


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wowa
Дата 13.9.2004, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Пока реализовал через if, elseif, а дальше посмотрим.
PM WWW   Вверх
arial
Дата 13.9.2004, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

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



Вот вариант вырезки гланд через зад:
Код
switch ($i) {
case 0:
case 1:
case 2:
case 3:
case 4:
  echo "i equals 0-5";
  break;
case 5:
case 6:
case 7:
case 8:
case 9:
  echo "i equals 5-10";
  break;
case 10:
case 11:
// Дальше по понятным причинам не продолжаю
case 99:
  echo "i equals 10-100";
  break;
}



--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
Kurt
Дата 13.9.2004, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Admin
А интервалы везде одинаковой длины? (ну, кроме последнего интервала..)
Например, здесь длина = 5.
Или у каждого интревала произвольная длина?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Wowa
Дата 13.9.2004, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



произвольная
PM WWW   Вверх
IZ@TOP
Дата 13.9.2004, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Предлагаю хитромудрый вариант решения:

Код
<?php

function GetConditionParam($i, $min, $max) {
if($i < $min) return false;
if($i > $max) return false;
return $i;
}

$i = 5;

switch($i) {
case GetConditionParam($i, 0, 10): {
 echo "i equals 0-10";
 break;
}
case  GetConditionParam($i, 11, 20): {
 echo "i equals 11-20";
 break;
}
case GetConditionParam($i, 21, 30): {
 echo "i equals 21-30";
 break;
}
case GetConditionParam($i, 31, 40): {
 echo "i equals 31-40";
 break;
}
}

?>

Добавлено @ 23:18
Цитата(arial @ 13.9.2004, 21:56)
switch ($i) {
case 0:
case 1:
case 2:
case 3:
case 4:
echo "i equals 0-5";
break;
case 5:
case 6:
case 7:
case 8:
case 9:
echo "i equals 5-10";
break;
case 10:
case 11:
// Дальше по понятным причинам не продолжаю
case 99:
echo "i equals 10-100";
break;
}

Хмхо изврат hmmm.gif
Добавлено @ 23:20
Admin
А какая задача потребовала решения таким вот изысканным способом? Может быть есть более простое решение?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Wowa
Дата 14.9.2004, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(IZ @ 13.9.2004, 22:16)
А какая задача потребовала решения таким вот изысканным способом? Может быть есть более простое решение?

Расскажу... Значит, к примеру для хостинга при заказе: выбирается срок оплаты: от 1 месяца до 2 лет.

В базе хранится разная стоимость тарифных планов в зависимости от того, насколько месяцев сразу оплачиваешь.

Поэтому я думал сделать:
Код

switch ($i) {
case (1..2):
echo "10 баксов в месяц";
break;
case (3..5):
echo "9 баксов в месяц";
break;
case (6..12):
echo "8 баксов в месяц";
break;
case (12..24):
echo "7.50 баксов в месяц";
break;
case (>24):
echo "7 баксов в месяц";
break;

}


Сейчас я это все реализовал через If-elseif. Получилось вроде бы весьма неплохо. Но все же решение с case мне также интересно. А приведенное тобой Изатоп-решение интерсно и в крайнем случае подошло бы. Но я был удивлен, что в ПХП по-другому нельзя.
PM WWW   Вверх
IZ@TOP
Дата 14.9.2004, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Ну в общем ясно. Раз на крайняк, так на крайняк. У меня правда была извращенная идея на счет массивов с циклами hmmm.gif Но это уже полный изврат... так что думаю твой вариант с ифами будет наиболее подходящим.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Ignat
Дата 14.9.2004, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



А такой вариант?
Код
switch (true) {
case ($i<=2?true:false):
echo "10 баксов в месяц";
break;
case ($i<=5?true:false):
echo "9 баксов в месяц";
break;
case ($i<=12?true:false):
echo "8 баксов в месяц";
break;
case ($i<=24?true:false):
echo "7.50 баксов в месяц";
break;
default:
echo "7 баксов в месяц";
break;
}



--------------------
Теперь при чем :P
PM   Вверх
Ignat
Дата 14.9.2004, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Такой вариант тоже работает:
Код
switch (true) {
case ($i<=2):
echo "10 баксов в месяц";
break;
case ($i<=5):
echo "9 баксов в месяц";
break;
case ($i<=12):
echo "8 баксов в месяц";
break;
case ($i<=24):
echo "7.50 баксов в месяц";
break;
default:
echo "7 баксов в месяц";
}



--------------------
Теперь при чем :P
PM   Вверх
Wowa
Дата 14.9.2004, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



switch (true) - это интересно...
PM WWW   Вверх
Ignat
Дата 14.9.2004, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(Admin @ 14.9.2004, 11:10)
switch (true) - это интересно...

Это позвляет вставить в блок case предикат.


--------------------
Теперь при чем :P
PM   Вверх
Гость_IZ@TOP
Дата 14.9.2004, 11:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ignat Да, что-то подумал я о таком варианте, но пробовать не стал hmmm.gif

  Вверх
Ignat
Дата 14.9.2004, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата
hmmm.gif

IZ@TOP, не сердись.
Кстати, что-то подобное есть на php.net



--------------------
Теперь при чем :P
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1230 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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