У меня есть страница, на которой я могу передавать от одной до трех переменных через строку запроса.

Есть три случая:

  • products.php? page = x
  • products.php? Пол = х & страница = х
  • products.php? Пол = x & ФИЛЬТР = x & page = x

Переменные page и gender всегда называются так, но одна FILTER может иметь три разных значения: brand, category и subcategory .

Поскольку переменная gender не является обязательной, я не могу использовать $_SERVER['QUERY_STRING'] для получения ее имени и значения, потому что это не всегда вторая переменная.

В зависимости от выбранного FILTER я делаю разные вещи, каждый фильтр имеет разные функции.

Мой вопрос: как я могу узнать, какой из трех фильтров выбран после исключения page и gender, так что в принципе, если что-то подобное возможно

if ( isset($_GET['brand']) || isset($_GET['category']) || isset($_GET['subcategory']) ) {

    // $selected = whichever variable is set, something like $(this) in jQuery

}

Альтернативой является создание оператора if() для каждого из трех случаев, но если я добавлю больше фильтров, мне придется добавить больше операторов if().

-2
C. Ovidiu 14 Авг 2014 в 17:46
if (in_array($_GET['filter'], array('brand', 'category', 'subcategory'))?
 – 
putvande
14 Авг 2014 в 17:48
Извините за непонятность, но фильтр - это просто заполнитель для одной из трех переменных. Таким образом, URL-адрес может быть products.php? Brand = 1 или это может быть products.php? Category = 2. Мне нужно знать имя переменной.
 – 
C. Ovidiu
14 Авг 2014 в 17:51
1
Если фильтр только один из трех, почему бы вам не использовать &filter=category, а затем php-side switch($_GET['filter'])?
 – 
birdspider
14 Авг 2014 в 17:51
@ C.Ovidiu Перебрать $_GET?
 – 
George
14 Авг 2014 в 17:52
1
Конечно, вам нужно запускать другой код в зависимости от переданного фильтра, поэтому, даже если вы можете сделать то, что вы предлагаете, вам потребуются дополнительные ifs / switch case для обработки правильного блока кода. С таким же успехом можно использовать ifs
 – 
Steve
14 Авг 2014 в 17:56

1 ответ

Лучший ответ

1) Вы можете использовать операторы if, как вы сказали.

2) Вы могли бы сделать что-нибудь вроде

Products.php? Пол = x & фильтр = x + c & page = x

$filter = explode('+', $_GET['filter']));
$type = $filter[0] //x
$value = $filter[1] //c

Тогда вы можете использовать переключатель для большей читабельности

switch($type){
    case 'brand':
        //do stuff
        break;
    default:
        //do stuff
}
1
oshell 14 Авг 2014 в 17:56