Передача массивов в $_GET и $_POST запросах
План:
- $_GET-массив на примере фильтра
- $_POST-массив на примере формы
- Некоторые особенности
1) $_GET-массив на примере фильтра
Очень, очень часто мы можем наблюдать безумные штуковины следующего вида:
/?view_type=list&show_descript=true&sort=rating&brand=philips&color=black&images_only=1&price_from=20000&page=5
- Параметры вида: view_type, show_descript
- Параметры фильтра + сортировка: sort, brand, color, images_only, price_from
- Пагинация: page
И вот как все это приходит:
array(8) {
["view_type"]=>
string(4) "list"
["show_descript"]=>
string(4) "true"
["sort"]=>
string(6) "rating"
["brand"]=>
string(7) "philips"
["color"]=>
string(5) "black"
["images_only"]=>
string(1) "1"
["price_from"]=>
string(5) "20000"
["page"]=>
string(1) "5"
}
Согласитесь, это не удобно!?
Теперь необходимо руками разбивать этот набор по группам, либо пребегать к различным "костыльным" методам. (Разумеется можно сделать это красиво и удобно, но это "плохой тон" имхо).
Разумный вариант:
/?view[type]=list&view[show_descript]=true&filter[sort]=rating&filter[brand]=philips&filter[color]=black&filter[images_only]=1&filter[price_from]=20000&page=5
array(3) { ["view"]=> array(2) { ["type"]=> string(4) "list" ["show_descript"]=> string(4) "true" } ["filter"]=> array(5) { ["sort"]=> string(6) "rating" ["brand"]=> string(7) "philips" ["color"]=> string(5) "black" ["images_only"]=> string(1) "1" ["price_from"]=> string(5) "20000" } ["page"]=> string(1) "5" }
2) $_POST-массив на примере формы
Почему в качестве примера я выбрал именно формы?
Часто, по крайней мере мне, выпадает необходимость предоставить пользователю возможность динамической генерации однотипных элементов интерфейса, например это могут быть input'ы для загрузки изображений, количество которых заранее не известно.
Со стороны недостаточно опытных веб-разработчиков привычным образом многие делают следующее:
В лучшем случае:
<input type="file" name="file_name[0]"> <input type="file" name="file_name[1]"> <input type="file" name="file_name[2]"> <input type="file" name="file_name[3]">
В худшем:
<input type="file" name="file_name"> <input type="file" name="file_name1"> <input type="file" name="file_name2"> <input type="file" name="file_name3">
А идеальный вариант находится так близко:
<input type="file" name="file_name[]"> <input type="file" name="file_name[]"> <input type="file" name="file_name[]"> <input type="file" name="file_name[]">
Такой "идеальный" относительно двух предыдущих вариантов дает возможность очень удобно и легко добавлять в DOM любое количество input'ов.
3) Некоторые особенности
Так же очень удобно формировать двумерные и более-мерные массивы следующим образом:
<form method="POST"> <input type="text" name="field[left][]"> <input type="text" name="field[right][]"> <input type="submit" value="Post"> </form>
Результат:
array(1) { ["field"]=> array(2) { ["left"]=> array(1) { [0]=> string(3) "111" } ["right"]=> array(1) { [0]=> string(3) "222" } } }