Відповіді:
Дуже просто:
$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('/')корисні, як це знайдено в цій самостійній бібліотеці .