2013-02-27 12 views
5

Chcę pobrać mój produkt z mojego adresu URL. Na przykład:adres URL php wybucha

http://www.website.com/product-category/iphone 

Ja chce chwycić iPhone i że jest w porządku z mojego kodu ale mam listę rozwijaną, aby posortować produkty, a które kliknięciu zmieni URL i dodać zapytanie jak:

http://www.website.com/product-category/iphone?orderby=popularity 
http://www.website.com/product-category/iphone?orderby=new 
http://www.website.com/product-category/iphone?orderby=price 
http://www.website.com/product-category/iphone?orderby=price-desc 

Mój obecny kod jest

$r = $_SERVER['REQUEST_URI']; 
$r = explode('/', $r); 
$r = array_filter($r); 
$r = array_merge($r, array()); 

$endofurl = $r[1]; 
echo $endofurl; 

Jak to możliwe, aby chwycić sekcji iPhone cały czas.

Cheers

+0

Czy nazwa produktu zawsze postępuj/kategorii produktu /? – mkaatman

Odpowiedz

5

Jeśli chcesz pobrać ostatniego elementu tablicy, można użyć funkcji end. Reszta twojego kodu wydaje się działać.

$endofurl = end($r); 

Można również wykorzystać parse_url i strrchr funkcje aby uczynić go bardziej zwięzły:

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/'); 
6

Można użyć parse_url() funkcji PHP podzielić URL dla Ciebie, a następnie uzyskać dostęp do parametru path i dostać się do końca IT:

$r = parse_url($url); 
$endofurl = substr($r['path'], strrpos($r['path'], '/')); 

to będzie analizować URL, a następnie podjąć "sub-string" w URL s tarting z ostatnio znalezionego / na ścieżce.

Można alternatywnie użyć explode('/') jak jesteś aktualnie robi na ścieżce:

$path = explode($r['path']); 
$endofurl = $path[count($path) - 1]; 

UPDATE (używając strrchr(), podkreślił @ x4rf41):
krótsza metoda uzyskiwania koniec ciąg, w przeciwieństwie do substr() + strrpos() jest użycie strrchr():

$endofurl = strrchr($r['path'], '/'); 

Jeśli korzystasz z parametrów opcji parse_url(), możesz również uzyskać tylko ścieżkę, używając PHP_URL_PATH, jak $ r = parse_url ($ url, PHP_URL_PATH);

Albo najkrótsza metoda:

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/'); 
+0

jeszcze krócej będzie '$ endofurl = strrchr (parse_url ($ url, PHP_URL_PATH), '/');' – x4rf41

2

Tylko zorientowali to out.This teraz pracuje z

$r = $_SERVER['REQUEST_URI']; 
$r = explode('/', $r); 
$r = array_filter($r); 
$r = array_merge($r, array()); 
$r = preg_replace('/\?.*/', '', $r); 

$endofurl = $r[1]; 
echo $endofurl;