[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выход из поиска при выполнении условия
boro-da
Добрый день, уважаемые форумчане!

Необходимо выбрать действие которое выполнить.

Ранее для этого применялся 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 smile.gif Сделать так, чтобы можно было легко и просто автоматизировать.

Спустя 9 минут, 19 секунд (10.01.2012 - 20:32) boro-da написал(а):
Со switch натолкнулся на трудности при проверке сложных условий


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 и пустую строку, ПХП приходит к выводу, что условие выполнено smile.gif Почему? Потому что таковы правила преобразования типов. Поэтому и выполняется присвоение $a=1.

Короче говоря, твой СВИЧ неправильно построен изначально. Потому и не работает.

Что делать, говоришь? Использовать ИФы-ЭЛСы. Только грамотно их построить. Либо, как я уже говорил, изменить методику построения $action, чтобы можно было автоматизировать более грамотно.

Спустя 8 минут, 30 секунд (10.01.2012 - 20:59) boro-da написал(а):
Про условия я в документации наткнулся, если возможно подскажи пожалуйста как можно организовать подобное на примере прилетающих напрмер
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, тема закрыта.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.