Odpowiedzi:
Po prostu:
$id = substr($url, strrpos($url, '/') + 1);
strrpos pobiera pozycję ostatniego wystąpienia ukośnika; substr zwraca wszystko po tej pozycji.
Jak wspomniano w redanimalwar, jeśli nie ma ukośnika, nie działa to poprawnie, ponieważ strrpos
zwraca false. Oto bardziej solidna wersja:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)
nie dostaje więcej upvotes, działa dla mnie idealnie.
$str = basename($url);
Możesz eksplodować na podstawie „/” i zwrócić ostatni wpis:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
Polega to na rozerwaniu struny, co nie jest konieczne, jeśli wiesz, że sam wzór struny wkrótce się nie zmieni. Możesz alternatywnie użyć wyrażenia regularnego, aby zlokalizować tę wartość na końcu ciągu:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explode
zawsze wydaje mi się bardziej nad głową, chociaż nigdy nie mierzyłem czasu, żeby zobaczyć, jak szybko jest.
$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);
Two one liners - podejrzewam, że pierwszy jest szybszy, ale drugi jest ładniejszy i niepodobny, end()
i array_pop()
możesz przekazać wynik funkcji bezpośrednio do current()
bez generowania żadnego powiadomienia ani ostrzeżenia, ponieważ nie przesuwa wskaźnika ani nie zmienia tablicy.
$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()
tego sposobu w php 5.4+ i nowszych spowoduje wyświetlenie powiadomienia. Według docs: „ musisz przekazać mu rzeczywistą zmienną, a nie funkcję zwracającą tablicę, ponieważ tylko rzeczywiste zmienne mogą być przekazywane przez odniesienie. ”.
Oto piękna dynamiczna funkcja, którą napisałem, aby usunąć ostatnią część adresu URL lub ścieżki.
/**
* 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('/')
pomocny, co znajdziesz w tej samodzielnej bibliotece .