Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Абстрактный вопрос по оптимизации
А теперь допустим, у нас 5 (пять) переменных. Несложно вычислить количество переборов else...if:
Цитата:
Вспоминаем комбинаторику: У нас конечное множество из N элементов, каждый элемент которого может быть либо 0 либо 1 (2 состояния), а это уже
2 в степени N.
Итак для 5 - получаем 32
а для 4 - 16
Итак - вопрос:
Как это сделать проще, эффективней, и чтобы занимало минимум кода? Есть-ли какое-либо универсальное решение?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Haron пишет:
А теперь допустим, у нас 5 (пять) переменных. Несложно вычислить количество переборов else...if - это 5! (факториал) = 120...
ммм, а почему? 5 булевых переменных дадут 32 возможных комбинации. Вычисляется же как количество возможных значений параметра, возведённые в степень - число параметров.
Факториал - это если у нас имеет значение порядок перечисления параметров. Да и факториал 3х как-то не 8 получится.
Универсальное решение - где-то в области автоматного программирования в общем и в определении неважный параметров в частности.
----- PostgreSQL DBA
Haron
Отправлено: 20 Апреля, 2011 - 23:51:30
Частый гость
Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010 Откуда: Оттуда
Помог: 5 раз(а)
Цитата:
ммм, а почему? 5 булевых переменных дадут 32 возможных комбинации.
Исправил Там не факториал )))
----- И чё?
evgenijj
Отправлено: 20 Апреля, 2011 - 23:54:52
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Ну, на нас, грешных, всегда проще все свалить. Выбрал пользователь что-то в первом списке -- строим динамически второй. Выбрал во втором -- строим третий. Эта задача давно решена -- о ней сотни статей написаны -- даже я не удержался: http://blog[dot]webmasterschool[dot]ru/ajax/5/
Я здесь строю всего три списка, но можно построить 30, 40, 50... Сколько браузер выдержит...
Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010 Откуда: Оттуда
Помог: 5 раз(а)
Давайте более предметно рассмотрим:
Вот к примеру скрипт контролирующий наличие записей в 5 полях. Если в каком-либо поле нет данных, а форма с полями отправилась на сервер, то скрипт должен вернуть ошибку напротив поля, что оно не заполнено. Причём могут быть не заполнено и не одно поле, а два, три или четыре.
----- И чё?
evgenijj
Отправлено: 21 Апреля, 2011 - 00:03:51
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Давайте так -- мухи отдельно, котлеты -- отдельно. Мы проверяем правильность заполнения формы, или строим динамические списки?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Haron пишет:
Вот к примеру скрипт контролирующий наличие записей в 5 полях. Если в каком-либо поле нет данных, а форма с полями отправилась на сервер, то скрипт должен вернуть ошибку напротив поля, что оно не заполнено. Причём могут быть не заполнено и не одно поле, а два, три или четыре.
А для чего проверять все поля одновременно?
Проверяйте каждое поле независимо от других. В простейшем случае:
0) перед проверками объявите флаг $is_form_valid=true;
1) если какое-то поле не заполнено, $is_form_valid=false;
2) если после проверки всех полей флаг всё ещё тру - выполняете действие, иначе - что-то не заполнено.
----- PostgreSQL DBA
SAD
Отправлено: 21 Апреля, 2011 - 00:12:37
Постоянный участник
Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009 Откуда: Днепропетровск, Украина
Помог: 75 раз(а)
js в помощь!
Haron
Отправлено: 21 Апреля, 2011 - 00:15:09
Частый гость
Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010 Откуда: Оттуда
Помог: 5 раз(а)
evgenijj пишет:
Давайте так -- мухи отдельно, котлеты -- отдельно. Мы проверяем правильность заполнения формы, или строим динамические списки?
Фактически задача сводится к контролю заполнения формы с произвольным количеством полей.
Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010 Откуда: Оттуда
Помог: 5 раз(а)
Задачку решил кстати, MVC подход - рулит, определённо. Воспользовался способом Мелкого, по ходу выполнения проверок - контроллер инициализирует определённые переменные в шаблонизаторе (отображении).
Раньше было 2е переменные, логин + ip, можно было написать если не логин то сделай выборку из базы и отсортируй по ip, либо выборка из базы и сортировка по логину, сейчас переменных 5 - я голову сломал уже.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.