Jawaban:
Sangat sederhana:
$id = substr($url, strrpos($url, '/') + 1);
strrpos mendapatkan posisi kemunculan terakhir dari garis miring; substr mengembalikan semuanya setelah posisi itu.
Seperti yang disebutkan oleh redanimalwar jika tidak ada garis miring, ini tidak berfungsi dengan benar karena strrposmengembalikan salah. Ini versi yang lebih kuat:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)tidak mendapatkan lebih banyak suara positif, berfungsi dengan baik untuk saya.
$str = basename($url);
Anda bisa meledak berdasarkan "/", dan mengembalikan entri terakhir:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
Itu didasarkan pada meniup senar hingga terpisah, sesuatu yang tidak perlu jika Anda tahu pola senar itu sendiri tidak akan segera berubah. Sebagai alternatif, Anda dapat menggunakan ekspresi reguler untuk menemukan nilai tersebut di akhir string:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explodeselalu tampak seperti lebih membebani saya, meskipun saya belum pernah menghitung waktunya untuk melihat seberapa cepatnya.
Anda dapat menggunakan substrdan 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);
Dua satu liner - Saya menduga yang pertama lebih cepat tetapi yang kedua lebih cantik dan tidak seperti end()dan array_pop(), Anda dapat meneruskan hasil dari suatu fungsi secara langsung ke current()tanpa menghasilkan pemberitahuan atau peringatan apa pun karena itu tidak memindahkan penunjuk atau mengubah array.
$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()cara ini di php 5.4+ dan yang lebih baru akan memberi tahu. Menurut docs: " Anda harus meneruskan variabel nyata dan bukan fungsi yang mengembalikan array karena hanya variabel aktual yang dapat diteruskan oleh referensi. ".
Inilah fungsi dinamis yang indah yang saya tulis untuk menghapus bagian terakhir dari url atau jalur.
/**
* 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('/')terbantu, seperti yang ditemukan di perpustakaan mandiri ini .