To wycina pierwszy znak, jeśli w ogóle nie ma ukośnika.
redanimalwar
@redanimalwar Dodałem kolejne rozwiązanie
DisgruntledGoat
9
Zastanawiam się, dlaczego $str = basename($url)nie dostaje więcej upvotes, działa dla mnie idealnie.
redanimalwar
2
@redanimalwar (1) basename jest przeznaczony dla ścieżek do plików, a nie adresów URL - myślę, że zawsze zwróci ten sam wynik, ale mogą wystąpić przypadki krawędzi, takie jak ukośniki odwrotne; (2) basename działa tylko dla ukośników, podczas gdy moją odpowiedź można łatwo zmodyfikować, jeśli ktoś inny chce zrobić to samo z inną postacią.
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:
explodezawsze wydaje mi się bardziej nad głową, chociaż nigdy nie mierzyłem czasu, żeby zobaczyć, jak szybko jest.
DisgruntledGoat
Wydaje się, że eksplodowanie () jest nieco wolniejsze. W 10 000 instancjach jest to czas potrzebny na oba. substr () pierwszy: 0,013657 / 0,045038
Sampson
Może być wolniejszy, ale wolę eksplodować tutaj. W szczególności, jeśli adres URL nie zawiera żadnego „/”, +1 w odpowiedzi strrpos sprawia, że bałagan jest w stanie przezwyciężyć.
Noam
1
Przykład rzuca ostrzeżenie i zdecydowanie należy go przerobić.
w php7 zwroty: PHP Notice: Only variables should be passed by reference.
billynoah
0
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)));
@redburn, użycie 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. ”.
billynoah
-1
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
*/privatefunction 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 .Odpowiedzi:
Po prostu:
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:źródło
$str = basename($url)
nie dostaje więcej upvotes, działa dla mnie idealnie.źródło
Możesz eksplodować na podstawie „/” i zwrócić ostatni wpis:
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:
źródło
explode
zawsze wydaje mi się bardziej nad głową, chociaż nigdy nie mierzyłem czasu, żeby zobaczyć, jak szybko jest.Możesz użyć
substr
istrrchr
:źródło
źródło
array_pop(explode("/", "http://vimeo.com/1234567"));
zwróci ostatni element przykładowego adresu URLźródło
PHP Notice: Only variables should be passed by reference
.Two one liners - podejrzewam, że pierwszy jest szybszy, ale drugi jest ładniejszy i niepodobny,
end()
iarray_pop()
możesz przekazać wynik funkcji bezpośrednio docurrent()
bez generowania żadnego powiadomienia ani ostrzeżenia, ponieważ nie przesuwa wskaźnika ani nie zmienia tablicy.źródło
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.
źródło