Необходимо выбрать действие которое выполнить.
Ранее для этого применялся switch, но теперь процесс начинает быть довольно ресурсоёмким, прошу помощи.
Вопрос: Чем можно заменить switch что бы при выполнении условия работа останавливалась?
Прмерные значения которые могут приходить в $action: 'uss11se', '1111', 'id1111', 'page1111', 'us111co'...
Пробовал использовать
if(substr($action,0,3) == 'uss' and ctype_digit(substr($action,3,2)) and substr($action,5,2) == 'se')
И если таких условий 40, то процесс заметно притормаживает...
Какую конструкцию можно использовать для быстрого окончания проверок условия, при выполнении одной из них.
Спустя 2 минуты, 30 секунд (10.01.2012 - 20:23) sergeiss написал(а):
Цитата (boro-da @ 10.01.2012 - 21:20) |
Какую конструкцию можно использовать для быстрого окончания проверок условия, при выполнении одной из них. |
А "if-else if-else if" что, отменили уже?
И чем теме switch не понравился?
Еще вариант - пересмотреть систему, по которой формируются имена, приходящие в action Сделать так, чтобы можно было легко и просто автоматизировать.
Спустя 9 минут, 19 секунд (10.01.2012 - 20:32) boro-da написал(а):
Со switch натолкнулся на трудности при проверке сложных условий
Может у меня в синтаксисе проблемы, я вот тоже удивлялся такому поведению. Ведь switch при break; должен прекращать проверку case'ов?
Я стараюсь упростить, но прежние разработчики просто жгли...
switch($action)
{
case (substr($url[1],0,2) == 'id'): $a = 1; break;
...
}
// Стабильно выдаёт $a = 1, при $action = '';
switch($url[1])
{
case (substr($url[1],0,2) == 'bo' and ctype_digit(substr($url[1]))): $a = 835; break;
...
}
// Стабильно выдаёт $a = 835, при $action = '';
Может у меня в синтаксисе проблемы, я вот тоже удивлялся такому поведению. Ведь switch при break; должен прекращать проверку case'ов?
Я стараюсь упростить, но прежние разработчики просто жгли...
Спустя 18 минут, 44 секунды (10.01.2012 - 20:51) sergeiss написал(а):
boro-da - если честно, то первый раз вижу, чтобы в CASE писали условие, а не выражение...
По его логике работы, выражение в CASE должно сравниваться с $action. То есть, например, (substr($url[1],0,2) == 'id') возвращает FALSE, если первые 2 символа в переменной не равны 'id'. При этом, как ты говоришь, $action == '', т.е. пустая строка. Сравнивая FALSE и пустую строку, ПХП приходит к выводу, что условие выполнено Почему? Потому что таковы правила преобразования типов. Поэтому и выполняется присвоение $a=1.
Короче говоря, твой СВИЧ неправильно построен изначально. Потому и не работает.
Что делать, говоришь? Использовать ИФы-ЭЛСы. Только грамотно их построить. Либо, как я уже говорил, изменить методику построения $action, чтобы можно было автоматизировать более грамотно.
По его логике работы, выражение в CASE должно сравниваться с $action. То есть, например, (substr($url[1],0,2) == 'id') возвращает FALSE, если первые 2 символа в переменной не равны 'id'. При этом, как ты говоришь, $action == '', т.е. пустая строка. Сравнивая FALSE и пустую строку, ПХП приходит к выводу, что условие выполнено Почему? Потому что таковы правила преобразования типов. Поэтому и выполняется присвоение $a=1.
Короче говоря, твой СВИЧ неправильно построен изначально. Потому и не работает.
Что делать, говоришь? Использовать ИФы-ЭЛСы. Только грамотно их построить. Либо, как я уже говорил, изменить методику построения $action, чтобы можно было автоматизировать более грамотно.
Спустя 8 минут, 30 секунд (10.01.2012 - 20:59) boro-da написал(а):
Про условия я в документации наткнулся, если возможно подскажи пожалуйста как можно организовать подобное на примере прилетающих напрмер
id[/d]{4}
posts
page[/d]{1,4}
''
жаль нельзя сделать
Тогда при выполнении какого-нибудь условая всё останавливалось...
id[/d]{4}
posts
page[/d]{1,4}
''
жаль нельзя сделать
if(усл1)
{
}
elseif(усл2)
{
}
elseif(усл3)
{
}
elseif(усл4)
{
}
else
{
}
Тогда при выполнении какого-нибудь условая всё останавливалось...
Спустя 23 минуты, 45 секунд (10.01.2012 - 21:23) boro-da написал(а):
Реструктуризация имён... Пара суток работы, будем делать весчЪ!
Но если у кого-то есть варианты буду рад...
Тема не брошена
Но если у кого-то есть варианты буду рад...
Тема не брошена
Спустя 19 минут, 8 секунд (10.01.2012 - 21:42) nugle написал(а):
чему равно $url[1]?
Спустя 1 час, 1 минута, 23 секунды (10.01.2012 - 22:44) sergeiss написал(а):
Цитата (boro-da @ 10.01.2012 - 21:59) |
жаль нельзя сделать |
А почему нельзя-то???
Спустя 1 час, 43 минуты, 2 секунды (11.01.2012 - 00:27) boro-da написал(а):
nugle
$url[1] = может принимать те же значения что и описаны для $action, по факту это он и есть, я просто изменил название для лучшего усвоения материала.
sergeiss
Да, нашёл в доках...
Может быть несколько elseif в одном if выражении. Первое же выражение elseif (если будет хоть одно) равное TRUE будет выполнено.
Решение найдено.
Всем спасибо за внимание, особенно sergeiss, тема закрыта.
$url[1] = может принимать те же значения что и описаны для $action, по факту это он и есть, я просто изменил название для лучшего усвоения материала.
sergeiss
Да, нашёл в доках...
Может быть несколько elseif в одном if выражении. Первое же выражение elseif (если будет хоть одно) равное TRUE будет выполнено.
Решение найдено.
Всем спасибо за внимание, особенно sergeiss, тема закрыта.