我试图获取此网址字符串的最后一部分: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)""
我做错了什么?
答案 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);