2009-09-01 75 views
83

Tôi muốn nhận các ký tự sau/cuối cùng trong url như http://www.vimeo.com/1234567Nhận các ký tự sau/cuối cùng trong url

Làm cách nào để thực hiện với php?

+0

Bạn có thể tìm thấy [ 's ($ str) -> afterLast ('/')'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str .php # L445) hữu ích, như được tìm thấy trong [thư viện độc lập này] (https://github.com/delight-im/PHP-Str). – caw

Trả lời

182

Rất đơn giản:

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

strrpos được vị trí của sự xuất hiện cuối cùng của dấu gạch chéo; substr trả về mọi thứ sau vị trí đó.


Như đã đề cập bởi redanimalwar nếu không có dấu gạch chéo này không hoạt động chính xác vì strrpos trả về giá trị sai. Dưới đây là một phiên bản mạnh mẽ hơn:

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

ooh tuyệt vời .. công việc của tôi đối với tôi..thanks – deadman

+1

giải pháp tốt và đơn giản, cảm ơn bạn. –

+0

Cắt giảm ký tự đầu tiên này nếu không có dấu gạch chéo. – redanimalwar

12

Bạn có thể explode dựa trên "/", và trả lại sự xâm nhập lần cuối:

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

Đó là dựa trên thổi chuỗi ngoài, một cái gì đó không phải là cần thiết nếu bạn biết mô hình của chuỗi bản thân nó sẽ không sớm thay đổi. Bạn có thể, cách khác, sử dụng một biểu thức chính quy để xác định vị trí giá trị mà ở phần cuối của chuỗi:

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

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

'phát nổ' luôn luôn có vẻ như chi phí cao hơn cho tôi, mặc dù tôi chưa bao giờ hẹn giờ để xem nó nhanh như thế nào. – DisgruntledGoat

+0

Nó xuất hiện phát nổ() là một chút chậm hơn. Trên trường hợp 10k, đây là lượng thời gian thực hiện cho cả hai. substr() đầu tiên: 0,013657/0.045038 – Sampson

+0

Có thể chậm hơn, nhưng tôi thích phát nổ ở đây. Cụ thể là nếu url không chứa bất kỳ "/" +1 nào trong câu trả lời strrpos thì việc phát hiện ra một mớ hỗn độn có thể khắc phục được. – Noam

1

array_pop(explode("/", "http://vimeo.com/1234567")); sẽ trở lại yếu tố cuối cùng của ví dụ url

+0

trong php7 Trả về thông báo: 'PHP Chú ý: Chỉ các biến sẽ được chuyển qua tham chiếu'. – billynoah

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

phiên bản của tôi, mặc dù kết quả cuối cùng giống như kết quả được đăng, cho phép OP sử dụng các mục khác của chuỗi phân chia nếu anh ta muốn. – ghostdog74

+0

đây là câu trả lời đúng, vì tiêu đề hỏi sau 'cuối cùng'/trong url –

9

Bạn có thể sử dụng substrstrrchr:

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

Giống như sau: ltrim (strrchr ($ url, "/"), "/"); strchr trả về một chuỗi, không phải là số –

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

Tính năng này có hoạt động trên các url không? Tên cơ sở không dành cho đường dẫn tệp? –

+1

Dường như hoạt động tốt, Đó là một hàm chuỗi; nó không kiểm tra nếu đường dẫn tồn tại. –

-1

Dưới đây là một đẹp chức năng động mà tôi đã viết để xóa phần cuối của url hoặc đường dẫn.

/** 
* 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

Hai một lớp lót - Tôi nghi ngờ đầu tiên là nhanh hơn nhưng thứ hai là đẹp và không giống như end()array_pop(), bạn có thể vượt qua các kết quả của một hàm trực tiếp đến current() mà không tạo ra bất kỳ thông báo hoặc cảnh báo vì nó doesn' t di chuyển con trỏ hoặc thay đổi mảng.

$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))); 
Các vấn đề liên quan