6

URLから製品を取得したいと思っています。例えば:

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

私はiPhoneを手に入れたいのですが、それは私のコードでは問題ありませんが、製品を並べ替えるためのドロップダウンがあり、クリックするとURLが変更され、次のようなクエリが追加されます。

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

私の現在のコードは

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

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

どうすればiPhoneセクションを常につかむことができますか。

乾杯

4

3 に答える 3

6

PHP のparse_url()関数を使用して URL を分割し、pathパラメータにアクセスして末尾を取得できます。

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

これは URL を解析し、パスで最後に見つかったものから始まる URL の「部分文字列」を取得し/ます。

代わりに、現在パスで行っているように使用できexplode('/')ます。

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

UPDATE ( strrchr()@ x4rf41 が指摘した を使用): +とは
対照的に、文字列の末尾を取得するより短い方法は、を使用することです。substr()strrpos()strrchr()

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

parse_url()のオプション パラメータを利用すると、次のように使用してパスだけを取得することもできます$ r =PHP_URL_PATH parse_url($url, PHP_URL_PATH);

または、最短の方法:

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/');
于 2013-02-27T17:13:24.807 に答える
5

配列の最後の要素を取得する場合は、 end関数を使用できます。残りのコードは機能しているようです。

$endofurl = end($r);

parse_url関数とstrrchr関数を利用して、より簡潔にすることもできます。

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/');
于 2013-02-27T17:11:57.033 に答える
4

ちょうどそれを考え出した.これは今で動作します

$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;
于 2013-02-27T17:17:33.650 に答える