php url爆炸

use*_*846 5 php arrays url explode

我想从我的网址抓取我的产品.例如:

http://www.website.com/product-category/iphone
Run Code Online (Sandbox Code Playgroud)

我想抓住iphone,这对我的代码很好,但我有一个下拉列表来排序产品,点击后会更改网址并添加如下查询:

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
Run Code Online (Sandbox Code Playgroud)

我目前的代码是

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

$endofurl = $r[1];
echo $endofurl;
Run Code Online (Sandbox Code Playgroud)

怎么可能一直抓住iphone部分.

干杯

new*_*rey 6

你可以使用PHP的parse_url()函数为你分割URL,然后访问path参数并得到它的结尾:

$r = parse_url($url);
$endofurl = substr($r['path'], strrpos($r['path'], '/'));
Run Code Online (Sandbox Code Playgroud)

这将解析URL,然后从/路径中的last-found开始,获取URL的"子字符串" .

您可以选择使用explode('/')当前正在路径上执行的操作:

$path = explode($r['path']);
$endofurl = $path[count($path) - 1];
Run Code Online (Sandbox Code Playgroud)

UPDATE(使用strrchr(),由@ x4rf41指出):
获取字符串结尾的较短方法,与substr()+ 相反strrpos()是使用strrchr():

$endofurl = strrchr($r['path'], '/');
Run Code Online (Sandbox Code Playgroud)

如果你利用了parse_url()选项参数,你也可以通过使用类似$ r = parse_url($ url,PHP_URL_PATH)来获得路径PHP_URL_PATH.

或者,最短的方法:

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/');
Run Code Online (Sandbox Code Playgroud)

  • 更短的是 `$endofurl = strrchr(parse_url($url, PHP_URL_PATH),'/');` (2认同)

Mir*_*ari 5

如果要检索数组的最后一个元素,可以使用end函数.其余代码似乎正在运行.

$endofurl = end($r);
Run Code Online (Sandbox Code Playgroud)

您还可以利用parse_urlstrrchr函数使其更简洁:

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/');
Run Code Online (Sandbox Code Playgroud)