Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Tablice w adresie URL.
Forum PHP.pl > Forum > PHP
stroju
Hej, chciałbym zapytać czy ktoś kojarzy może funkcję która zmienne w adresie przekształca na tablice, np
Kod
www.google.pl/index.php?a=1&a=4&b=2


Przerobiło na coś takiego:
$a[0] = 1
$a[1] = 4
$b = 2

Jeśli to w ogóle możliwe.
ctom
pytanie jest albo tak proste albo podchwytliwe smile.gif

chcesz z tego stringa wyciągnąć "zmienne" czy chcesz z requesta pobrać zmienne $_GET (!) questionmark.gif
stroju
Raczej ta druga opcja, tablicę get znam, ale to nie o to chodziło, natomiast artykuł od com'a jest pomocny, tylko że chciałbym się pozbyć w tym wszystkim nawiasów [], nie wiem czy to jest możliwe, ale choćby na filmweb.pl przy wyszukiwaniu tablice są teoretycznie bez tych nawiasów..
ctom
a tek z ciekawości możesz z tego filmwebu podać przykład jak przekazują w URL zmienna jako tablicę bez [] ?
stroju
Kod
http://www.filmweb.pl/search/film?q=&genreIds=28&genreIds=6&genreIds=45&startYear=&endYear=&startRate=&endRate=&startCount=&endCount=&sort=TEXT_SCORE&sortAscending=false
Właśnie tutaj dobrze to widać, w przypadku zmiennej genreIds, zastanawiałem się jak to osiągnąć, mod_rewrite ?
ctom
pewnie parsują jakoś ten URL , a nie pobierają przez $_GET

z tym sobie pokombinuj :
Kod
var_dump( explode('&',$_SERVER["REQUEST_URI"]) );
stroju
no tak, po prostu jestem ciekawy czy php ma coś co pozwala na takie rozwiązanie smile.gif
Crozin
Będziesz musiał ręcznie przetworzyć tę część URL-a. W świecie PHP przyjęte jest, że argumenty tablicowe w URL-ach mają format tablica[klucz], stąd też i wszystkie wbudowane funkcje działają w ten sposób.

  1. function parseQueryString($qs) {
  2. $return = array();
  3.  
  4. if (strpos($qs, '&') === false) {
  5. $qs = array($qs);
  6. } else {
  7. $qs = explode($qs, '&');
  8. }
  9.  
  10. foreach ($qs as $pair) {
  11. if (strpos($pair, '=') === false) {
  12. $return[$pair] = true;
  13.  
  14. continue;
  15. }
  16.  
  17. list($key, $value) = explode($pair, '=', 2);
  18.  
  19. if (!isset($return[$key])) {
  20. $return[$key] = $value;
  21. } else if (is_array($return[$key])) {
  22. $return[$key][] = $value;
  23. } else {
  24. $return[$key] = array($return[$key]);
  25. $return[$key][] = $value;
  26. }
  27. }
  28.  
  29. return $return;
  30. }
Przy czym nie polecam korzystania z takiego kodu. Te nawiasy w absolutnie niczym nie przeszkadzają, a zaoszczędzą Ci masy problemów. W dodatku takie podejście uniemożliwia Ci skorzystanie z wielowymiarowych tablic oraz wymuszać będzie każdorazowe sprawdzanie czy dany parametr z URL-a jest tablicą czy nie.
stroju
no tak, dlatego jeśli już bym cokolwiek wykorzystywał to raczej oparte na prostocie, nawiasy nie są złe, kwestia dobrego kodowania linków, nie mniej jest to jakaś ciekawostka dla rozwiązania filmwebu skoro zdecydowali się na takie rozwiązanie. A z doświadczenia wiem że tam gdzie da się pisać bez pętli to należy tak robić, bo pętle to najgorsze co może być przy większej ilości przejść.
nospor
Cytat
A z doświadczenia wiem że tam gdzie da się pisać bez pętli to należy tak robić, bo pętle to najgorsze co może być przy większej ilości przejść.
Chyba lekko przesadzasz albo uogolniasz cos co kiedys zle zrobiles....

A ty myslisz ze filmweb po sparsowaniu tego URLa to nie robi z tego tablicy? Zapewne robi, no chyba ze od razu podczas parsowania buduje niezbedne zapytanie do bazy.
Tak czy siak nie wplywa to na polepszenie predkosci nieuzywanie tutaj [].
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.