Câu trả lời:
Rất đơn giản:
$id = substr($url, strrpos($url, '/') + 1);
strrpos nhận vị trí của lần 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ó không hoạt động chính xác vì strrpos
trả về false. Đây là một phiên bản mạnh mẽ hơn:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)
không nhận được nhiều ủng hộ hơn, hoạt động hoàn toàn tốt cho tôi.
$str = basename($url);
Bạn có thể phát nổ dựa trên "/" và trả lại mục nhập cuối cùng:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
Đó là dựa trên việc thổi sợi dây ra xa nhau, điều không cần thiết nếu bạn biết bản thân mẫu của dây sẽ không sớm thay đổi. Ngoài ra, bạn có thể sử dụng một biểu thức chính quy để xác định giá trị đó ở cuối chuỗi:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explode
Với tôi luôn luôn có vẻ như không cần thiết, mặc dù tôi chưa bao giờ đếm thời gian để xem nó nhanh như thế nào.
Bạn có thể sử dụng substr
và 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);
Hai lớp lót một - tôi nghi ngờ cái đầu tiên nhanh hơn nhưng cái thứ hai đẹp hơn và không giống end()
và array_pop()
, bạn có thể chuyển trực tiếp kết quả của một hàm current()
mà không tạo ra bất kỳ thông báo hoặc cảnh báo nào vì nó không 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)));
end()
cách này trong php 5.4+ trở lên sẽ đưa ra thông báo. Theo tài liệu: " bạn phải chuyển cho nó một biến thực chứ không phải một hàm trả về một mảng vì chỉ các biến thực tế mới có thể được truyền bằng tham chiếu. ".
Đây là một hàm động tuyệt đẹp mà tôi đã viết để xóa phần cuối cùng 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;
}
s($str)->afterLast('/')
hữu ích, như được tìm thấy trong thư viện độc lập này .