Answers:
很简单:
$id = substr($url, strrpos($url, '/') + 1);
strrpos获取最后一次出现斜线的位置;substr返回该位置之后的所有内容。
如redanimalwar所述,如果没有斜杠,则此方法将无法正常工作,因为它会strrpos
返回false。这是一个更强大的版本:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)
没有得到更多的投票,对我来说效果很好。
$str = basename($url);
您可以基于“ /” 爆炸,并返回最后一个条目:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
这是基于将字符串分开,如果您知道字符串本身的模式不会很快改变,则不需要这样做。或者,您可以使用正则表达式将该值定位在字符串的末尾:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explode
对我来说,似乎总是有更多的开销,尽管我从来没有定时过看看它有多快。
$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str; // Output: 1234567
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);
两个一衬垫-我怀疑第一个是快,但第二个是漂亮,不像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)));
end()
在php 5.4+及更高版本中使用此方式将引发通知。根据docs:“ 您必须传递给它一个实变量而不是一个返回数组的函数,因为只有实际的变量可以通过引用传递。 ”
这是我编写的一个漂亮的动态函数,用于删除url或路径的最后一部分。
/**
* 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;
}
s($str)->afterLast('/')
如在该独立库中所发现的,您可能会有所帮助。