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:
Ini memotong karakter pertama jika tidak ada garis miring sama sekali.
redanimalwar
@redanimalwar Saya menambahkan solusi lain
DisgruntledGoat
9
Saya bertanya-tanya mengapa $str = basename($url)tidak mendapatkan lebih banyak suara positif, berfungsi dengan baik untuk saya.
redanimalwar
2
@redanimalwar (1) basename ditujukan untuk jalur file, bukan URL - Saya pikir itu akan selalu mengembalikan hasil yang sama tetapi mungkin ada kasus tepi seperti garis miring terbalik; (2) basename hanya berfungsi untuk garis miring sedangkan jawaban saya dapat dengan mudah diubah jika orang lain ingin melakukan hal yang sama dengan karakter yang berbeda.
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:
explodeselalu tampak seperti lebih membebani saya, meskipun saya belum pernah menghitung waktunya untuk melihat seberapa cepatnya.
DisgruntledGoat
Tampaknya meledak () sedikit lebih lambat. Pada 10 ribu kasus, ini adalah jumlah waktu yang dibutuhkan untuk keduanya. substr () pertama: 0,013657 / 0,045038
Sampson
Mungkin lebih lambat, tapi saya lebih suka meledak di sini. Khususnya jika url tidak mengandung "/" maka +1 pada jawaban strrpos membuat kekacauan meledak mampu diatasi.
Noam
1
Contoh tersebut memberikan pemberitahuan dan harus dikerjakan ulang.
di php7 Returns melihat: PHP Notice: Only variables should be passed by reference.
billynoah
0
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)));
@redburn, Menggunakan 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. ".
billynoah
-1
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
*/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('/')
terbantu, seperti yang ditemukan di perpustakaan mandiri ini .Jawaban:
Sangat sederhana:
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
strrpos
mengembalikan salah. Ini versi yang lebih kuat:sumber
$str = basename($url)
tidak mendapatkan lebih banyak suara positif, berfungsi dengan baik untuk saya.sumber
Anda bisa meledak berdasarkan "/", dan mengembalikan entri terakhir:
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:
sumber
explode
selalu tampak seperti lebih membebani saya, meskipun saya belum pernah menghitung waktunya untuk melihat seberapa cepatnya.Anda dapat menggunakan
substr
danstrrchr
:sumber
sumber
array_pop(explode("/", "http://vimeo.com/1234567"));
akan mengembalikan elemen terakhir dari contoh urlsumber
PHP Notice: Only variables should be passed by reference
.Dua satu liner - Saya menduga yang pertama lebih cepat tetapi yang kedua lebih cantik dan tidak seperti
end()
danarray_pop()
, Anda dapat meneruskan hasil dari suatu fungsi secara langsung kecurrent()
tanpa menghasilkan pemberitahuan atau peringatan apa pun karena itu tidak memindahkan penunjuk atau mengubah array.sumber
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.
sumber