Получить символы после последнего / в URL - PullRequest
108 голосов
/ 01 сентября 2009

Я хочу получить символы после последнего / в URL-адресе, например http://www.vimeo.com/1234567

Как мне поступить с php?

Ответы [ 8 ]

228 голосов
/ 01 сентября 2009

Очень просто:

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

strrpos получает позицию последнего появления косой черты; substr возвращает все после этой позиции.


Как упомянуто redanimalwar, если косой черты нет, это не будет работать правильно, поскольку strrpos возвращает false. Вот более надежная версия:

$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
42 голосов
/ 01 сентября 2009
$str = basename($url);
13 голосов
/ 01 сентября 2009

Вы можете взорвать на основе "/" и вернуть последнюю запись:

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

Это основано на разрыве строки, что не нужно, если вы знаете, что структура самой строки не скоро изменится. Вы также можете использовать регулярное выражение, чтобы найти это значение в конце строки:

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

if ( preg_match( "/\d+$/", $url, $matches ) ) {
    print $matches[0];
}
11 голосов
/ 01 сентября 2009

Вы можете использовать substr и strrchr:

$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str;      // Output: 1234567
6 голосов
/ 01 сентября 2009
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);
1 голос
/ 01 сентября 2009

array_pop(explode("/", "http://vimeo.com/1234567")); вернет последний элемент примера url

0 голосов
/ 10 января 2017

Два однострочника - я подозреваю, что первый быстрее, а второй красивее и, в отличие от 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)));
0 голосов
/ 27 мая 2015

Вот прекрасная динамическая функция, которую я написал для удаления последней части 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...