Ответы:
Очень просто:
$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
Мне всегда кажется, что это слишком накладно, хотя я никогда не рассчитывал время, чтобы увидеть, насколько он быстр.
Вы можете использовать substr
и strrchr
:
$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+ и выше будет выведено уведомление. Согласно документации: « вы должны передать ему реальную переменную, а не функцию, возвращающую массив, потому что только фактические переменные могут передаваться по ссылке ».
Вот красивая динамическая функция, которую я написал для удаления последней части 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('/')
полезные сведения, найденные в этой автономной библиотеке .