2010-10-19 2 views
1

Я создаю раздел фильтров для своей страницы поиска, и мне было интересно, как лучше всего выполнять строки запроса. Моя проблема в том, что эти ссылки работают так же, как флажки, поэтому некоторые, все или ничто не может быть включено. Мне пришлось бы перебирать каждую из примерно 30 или около того ссылок, удаляя или добавляя значение конкретной ссылки в зависимости от ее состояния.Строка запроса строки запроса

Моя первая забота:

Должен ли я передавать массивы как

colors=red,blue,green //explode?

или

colors[]=red&colors[]=blue&colors[]=green //parse_str?

Какой самый быстрый/лучший способ удалить определенное значение определенного массива, как я петля через каждую ссылку? Я предполагаю, что это будет немного сложнее с использованием второго метода, который я опубликовал выше, да?



EDIT2 - Что вы об этом думаете?

Я побежал в учебник онлайн и придумал это:

 
function remove($filters = array(), $remove_key = NULL, $remove_val = NULL) 
    { 
     if($remove_key != NULL && array_key_exists($remove_key,$filters)) 
     { 
      if($remove_val != NULL && array_key_exists($remove_val,array_flip($filters[$remove_key]))) 
      { 
       $filters[$remove_key] = array_diff($filters[$remove_key],array($remove_val)); 
      } else { 
       unset($filters[$remove_key]); 
      } 
     } 
     return http_build_query($filters); 
    } 

В настоящее время я могу передать $ remove_key удалить ключ и $ remove_val, чтобы удалить значение из ключа в массиве.

Что вы, ребята, думаете? Будет ли это слишком медленно для 30-50 ссылок? Благодаря!

+2

Примечания в вашем втором примере вы не должны называть 'parse_str'; PHP будет заполнять '$ _GET ['colors']' массивом для вас. – meagar

ответ

3
colors[]=red&colors[]=blue&colors[]=green 

Будет ли способ представлять данные (когда method = "get"). И вы можете получить к нему доступ через $ _GET ['colors'], который является родным, и, возможно, самым быстрым способом.

EDIT: чтобы получить эту строку через http_build_query просто заполнить их в цвете массива

$data = array('colors' => array('green','red','blue')); 
echo http_build_query($data); // colors[0]=green&colors[1]=red&colors[2]=blue 
+0

+1: Не говоря уже о том, что для сборки JavaScript не требуется. И это самый переносимый метод (так как все браузеры должны уметь его обрабатывать) ... – ircmaxell

+1

@ircmaxell thx - прозрачный случай KISS – Hannes

+0

colors [] = красный и цвет [] = синий и цвет [] = зеленый превращается в 0 = красный и 1 = синий и 2 = зеленый, когда я использую http_build_query - как я могу перестроить строку запроса? (или даже удалить значение перед его восстановлением?) – RS7

Смежные вопросы