2009-09-01 13 views
83

chcę uzyskać znaki po ostatnim/url jak w http://www.vimeo.com/1234567Get znaki po ostatnim/url w

Jak zrobić z php?

+0

Możecie znaleźć [ 's ($ str) -> afterLast ('/')'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str .php # L445) pomocne, jak znaleźć w [tej samodzielnej bibliotece] (https://github.com/delight-im/PHP-Str). – caw

Odpowiedz

182

Bardzo prosto:

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

strrpos ją pozycję ostatniego wystąpienia kreską; substr zwraca wszystko po tej pozycji.


Jak wspomniano przez redanimalwar jeśli nie ma ukośnik to nie działa prawidłowo ponieważ strrpos zwraca false. Oto bardziej wytrzymała wersja:

$pos = strrpos($url, '/'); 
$id = $pos === false ? $url : substr($url, $pos + 1); 
+0

ooh super .. to dla mnie praca .. dzięki – deadman

+1

ładne i proste rozwiązanie, dziękuję. –

+0

To cięcie pierwszego znaku, jeśli w ogóle nie ma ukośnika. – redanimalwar

12

Mogłabyś explode oparte na „/”, i powrócić ostatni wpis:

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

To oparta na dmuchanie ciąg siebie, coś, co nie jest konieczne, jeśli znasz wzór napisu sama się wkrótce nie zmieni. Można alternatywnie użyć wyrażenia regularnego, aby znaleźć tę wartość na koniec napisu:

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

if (preg_match("/\d+$/", $url, $matches)) { 
    print $matches[0]; 
} 
+0

'eksplodować' zawsze wydaje się być bardziej narzutową dla mnie, chociaż nigdy nie miałem czasu, aby zobaczyć, jak szybko to jest. – DisgruntledGoat

+0

Wygląda na to, że explode() jest nieco wolniejszy. W przypadku instancji 10k jest to ilość czasu potrzebna na oba. substr() first: 0.013657/0.045038 – Sampson

+0

Może być wolniejszy, ale wolę eksplodować tutaj. W szczególności jeśli URL nie zawiera żadnych "/" +1 w odpowiedzi na strrpos sprawia, że ​​eksplozja bałaganu jest w stanie przezwyciężyć. – Noam

1

array_pop(explode("/", "http://vimeo.com/1234567")); zwróci ostatni element przykładowy adres URL

+0

w php7 Zwraca uwagę: 'PHP Notice: Tylko zmienne powinny być przekazywane przez referencję'. – billynoah

5
$str = "http://www.vimeo.com/1234567"; 
$s = explode("/",$str); 
print end($s); 
+3

Moja wersja, chociaż wynik końcowy jest taki sam jak opublikowany, umożliwia OP używanie innych elementów podzielonego ciągu, jeśli chce. – ghostdog74

+0

to jest poprawna odpowiedź, ponieważ tytuł pyta po "last"/in url –

9

Można użyć substr i strrchr:

$url = 'http://www.vimeo.com/1234567'; 
$str = substr(strrchr($url, '/'), 1); 
echo $str;  // Output: 1234567 
+0

Więcej tak: ltrim (strrchr ($ url, "/"), "/"); strchr zwraca ciąg znaków, a nie numer –

28
$str = basename($url); 
+1

Czy działa to w przypadku adresów URL? Czy ścieżka do plików nie jest przeznaczona na basename? –

+1

Wydaje się działać bez zarzutu, To jest funkcja ciągu; nie sprawdza, czy ścieżka istnieje. –

-1

Oto piękny funkcja dynamiczna, 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; 
} 
0

dwa jeden wkładki - Podejrzewam, że pierwszy z nich jest szybsza, ale drugi jest ładniejszy iw przeciwieństwie end() i array_pop(), można przekazać wynik funkcji bezpośrednio do current() bez generowania żadnego zawiadomienia lub ostrzeżenia, ponieważ nie robi” t przesuń wskaźnik lub zmień tablicę.

$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))); 
Powiązane problemy