Reputation: 19072
I want to get the characters after the last / in an url like http://www.vimeo.com/1234567
How do I do with php?
Upvotes: 156
Views: 186678
Reputation: 119
My version is:
trim(strrchr($url, "/"), "/");
https://www.php.net/manual/function.strrchr
Upvotes: 2
Reputation: 5416
Check out basename(). It should work like this:
$string = basename($url);
Upvotes: 66
Reputation: 22941
Two one liners - I suspect the first one is faster but second one is prettier and unlike end()
and array_pop()
, you can pass the result of a function directly to current()
without generating any notice or warning since it doesn't move the pointer or alter the array.
$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)));
Upvotes: 0
Reputation: 72530
Very simply:
$id = substr($url, strrpos($url, '/') + 1);
strrpos gets the position of the last occurrence of the slash; substr returns everything after that position.
As mentioned by redanimalwar if there is no slash this doesn't work correctly since strrpos
returns false. Here's a more robust version:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
Upvotes: 322
Reputation: 31130
Here's a beautiful dynamic function I wrote to remove last part of url or 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;
}
Upvotes: -1
Reputation: 268344
You could explode based on "/", and return the last entry:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
That's based on blowing the string apart, something that isn't necessary if you know the pattern of the string itself will not soon be changing. You could, alternatively, use a regular expression to locate that value at the end of the string:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
Upvotes: 13
Reputation: 725
You can use substr
and strrchr
:
$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str; // Output: 1234567
Upvotes: 12
Reputation: 342363
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);
Upvotes: 10
Reputation: 16962
array_pop(explode("/", "http://vimeo.com/1234567"));
will return the last element of the example url
Upvotes: 1