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


Can't get the last part of url

我正在尝试获取此 url 字符串的最后一部分: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);

但我得到:

字符串(0) "

我做错了什么?

$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.....
}

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

$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

字符串(6) "S11663"

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

字符串(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));

将输出

字符串(38) "国家/意大利/意甲/20152016/S11663"

,所以没有必要parse_url它 - 除非您尝试解析以下内容:


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

我保持原样,以防您要使用完整的网址...

当你这样做时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);