Математика
Я завёл отдельную переменную под режим сортировки, пусть будет $order.
Задачи:
1. Преобразовать пользовательский ввод (wild input) так, чтобы переменная $order принимала только значения 0 или 1.
2. При выводе заголовка столбца значение $order инвертировать для смены режима сортировки.
От использования if я отказался, потому что, допустим, появится ещё один режим, и придётся в первой задаче дописывать целую ветку.
Поэтому я использовал такие тривиальные математические выкладки:
1. Какая функция даёт в результате только 0 или 1? Правильно, нахождение остаток от деления на 2, а чтобы убрать отрицательные значения, возьмём ещё и модуль:
$order = abs($order % 2);
Т.е. в общем случае надо брать остаток от max+1 (соответстенно, в случае расчёта рейтингов в диапазоне 0-10 я находил остаток от 11).
2. Где-то я слышал про такой метод, работает отлично для инверсии: складываем оба варианта и каждый раз вычитаем входной вариант из общей суммы:
echo (1-$order);Единица здесь получилась из мега-рассчёта 1 = (0+1), т.е. оба варианта в сумме.
2 комментов:
А что если использовать
$order = !$order
Булевы функции тоже дают 0 или 1 :-)
Пропарился :]
Ты прав, тут булева логика как нельзя к месту. У меня глаз замылился - я использовал этот кусок для приведения введенного пользователем рейтинга к диапазону 0-10:
$rating = $rating % 11;
Ну и закопипастил по аналогии :]
Отправить комментарий