在 last/in url 后获取字符

我希望获得像 http://www.vimeo.com/1234567这样的 URL 中最后/之后的字符

我怎么处理 php?

174044 次浏览

您可以基于“/”返回 爆炸,并返回最后一项:

print end( explode( "/", "http://www.vimeo.com/1234567" ) );

那是基于把绳子吹开,如果你知道绳子本身的模式不会很快改变,那就没有必要这么做了。您也可以使用正则表达式在字符串末尾定位该值:

$url = "http://www.vimeo.com/1234567";


if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}

很简单:

$id = substr($url, strrpos($url, '/') + 1);

Strrpos 获取斜杠最后出现的位置; 字幕返回该位置之后的所有内容。


正如 redanimalwar 所提到的,如果没有斜杠,那么这个函数就不能正常工作,因为 strrpos返回 false。下面是一个更加健壮的版本:

$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);

array_pop(explode("/", "http://vimeo.com/1234567"));将返回示例 url 的最后一个元素

$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);

你可以使用 substrstrrchr:

$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str;      // Output: 1234567

看看 Basename (),它应该是这样工作的:

$string = basename($url);

下面是我编写的一个漂亮的动态函数,用来删除 url 或 path 的最后一部分。

/**
* remove the last directories
*
* @param $path the path
* @param $level number of directories to remove
*
* @return string
*/
private function removeLastDir($path, $level)
{
if(is_int($level) && $level > 0){
$path = preg_replace('#\/[^/]*$#', '', $path);
return $this->removeLastDir($path, (int) $level - 1);
}
return $path;
}

两个一行程序——我怀疑第一个更快,但是第二个更漂亮。不像 end()array_pop(),你可以直接将函数的结果传递给 current(),而不会产生任何通知或警告,因为它不会移动指针或更改数组。

$var = 'http://www.vimeo.com/1234567';


// VERSION 1 - one liner simmilar to DisgruntledGoat's answer above
echo substr($a,(strrpos($var,'/') !== false ? strrpos($var,'/') + 1 : 0));


// VERSION 2 - explode, reverse the array, get the first index.
echo current(array_reverse(explode('/',$var)));
Str::afterLast($url, '/');

自从 Laravel 6 以来 Laravel 的一种辅助方法。