我正在尝试获取此 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);