无法获取网址的最后一部分

时间:2016-03-12 14:47:33

标签: php html

我试图获取此网址字符串的最后一部分:national/italy/serie-a/20152016/s11663/

我的目标是:s11663这是我的代码:

$path = parse_url("national/italy/serie-a/20152016/s11663/", PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);
var_dump($end);

但我明白了:

  

string(0)""

我做错了什么?

3 个答案:

答案 0 :(得分:5)

我的$path字符串末尾包含/所以,当你爆炸时,最后的/也会被计算,最后一个片段什么都没有,因为之后什么都没有最后/,所以只需删除/

$path = parse_url("national/italy/serie-a/20152016/s11663", PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);
var_dump($end);

或者,如果您无法移除最后/,那么只需substr字符串:

$url = "national/italy/serie-a/20152016/s11663/";
$url = substr($url, 0, strlen($url) - 1);
$path = parse_url($url, PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);
var_dump($end);

希望它可以帮到你!

更新

在最后一个例子中,只有substr是最后一个字母被切断,无论是什么字符,所以,你可以做的就像@ firstone评论所建议的那样,使用而不是$url = substr($url, 0, strlen($url) - 1);,是:

$url = rtrim($url, "/");

或,这:

if($url[strlen($url) - 1] == "/") {
    $url = substr($url, 0, strlen($url) - 1);
} else {
    // Let the url be as it is.....
}

答案 1 :(得分:3)

因为你最后有一个尾随/,你必须得到倒数第二个:

$path = parse_url("national/italy/serie-a/20152016/s11663/", PHP_URL_PATH);
$pathFragments = explode('/', $path);
array_pop($pathFragments); // remove last (empty value)
$end = end($pathFragments);
var_dump($end);

在您的问题上查看$pathFragments的输出:

Array
(
    [0] => national
    [1] => italy
    [2] => serie-a
    [3] => 20152016
    [4] => s11663
    [5] => 
)

此代码适用于以结尾且不带/的字符串:

$path = parse_url("national/italy/serie-a/20152016/s11663", PHP_URL_PATH);
$pathFragmenst = (substr($path, -1) == '/') ? 
    $pathFragments = explode('/', $path, -1) :
    $pathFragments = explode('/', $path);

$end = end($pathFragments);
var_dump($end);

../s11663/的输出:https://3v4l.org/BWjkd

  

string(6)" s11663"

../s11663的输出:https://3v4l.org/H7fP9

  

string(6)" s11663"

备注:

1 - 此代码:

$pathFragmenst = (substr($path, -1) == '/') ? 
    $pathFragments = explode('/', $path, -1) :
    $pathFragments = explode('/', $path);

简称:

if(substr($path, -1) == '/'){
    $pathFragments = explode('/', $path, -1);
}else{
    $pathFragments = explode('/', $path);
}

2 - 我不知道该字符串是url_parse的结果,还是你真的想解析它,但是

var_dump(parse_url("national/italy/serie-a/20152016/s11663", PHP_URL_PATH));

将输出

  

string(38)" national / italy / serie-a / 20152016 / s11663"

,所以不需要parse_url - 除非您尝试解析类似的内容:

  

http://example.com/national/italy/serie-a/20152016/s11663/
  ^^^^^^^^^^^^^^^^^^^

我将其保留为,以防您将使用完整的网址...

答案 2 :(得分:2)

执行explode('/', $path);时,结果数组的最后一个元素为空,因为最后一项将是最后一项后面的部分“/".

使用建议的解决方案之一或切换到使用preg_match()

$end = '';
$path = parse_url("national/italy/serie-a/20152016/s11663/", PHP_URL_PATH);

if(preg_match('#/([^/]+)/$#', $path, $matches)) {
  $end = $matches[1];
}

var_dump($end);