Saya mencoba mengekstraksi substring. Saya butuh bantuan untuk melakukannya di PHP.
Berikut adalah beberapa string sampel yang saya kerjakan dan hasil yang saya butuhkan:
home/cat1/subcat2 => home
test/cat2 => test
startpage => startpage
Saya ingin mendapatkan string sampai yang pertama /
, tetapi jika tidak /
ada, dapatkan seluruh string.
Saya mencoba,
substr($mystring, 0, strpos($mystring, '/'))
Saya pikir itu mengatakan - mendapatkan posisi /
dan kemudian mendapatkan substring dari posisi 0 yang posisi.
Saya tidak tahu bagaimana menangani kasus di mana tidak ada /
, tanpa membuat pernyataan terlalu besar.
Apakah ada cara untuk menangani kasus itu juga tanpa membuat pernyataan PHP terlalu rumit?
s($str)->beforeFirst('/')
bermanfaat, seperti yang ditemukan di perpustakaan mandiri ini .Jawaban:
Menggunakan
explode()
Dalam hal ini, saya menggunakan
limit
parameter untukexplode
sehingga php tidak akan memindai string lebih dari yang dibutuhkan.sumber
$arr = explode('/',$mystring,2); echo $arr[0];
. Saya tidak bisa mendapatkan string pertama dalam satu pernyataan itu sendiri -echo explode('/',$mystring,2)[0];
. Karena explode mengembalikan array, saya harus bisa melakukannya dengan benar? Tapi saya mendapatkan kesalahan. Ada saran?explode() + [0]
adalah cara bertele-tele untuk menulisstrtok($string, "/")
Solusi yang paling efisien adalah
strtok
fungsinya:Sebagai contoh:
dan
sumber
current-explode
solusinya. (Bukannya saya sering menggunakannya sehingga penting.)explode
solusi yang diberikan.strtok
isfirst/second
akan kembalifirst
tetapi/second
akan kembalisecond
daripada string kosong.sumber
Bagaimana dengan ini :
Cukup tambahkan '/' pada akhir mistik sehingga Anda dapat yakin ada setidaknya satu;)
sumber
Versi satu-baris dari jawaban yang diterima:
Harus bekerja di php 5.4+
sumber
Ini mungkin contoh terpendek yang muncul di benak saya:
1)
list()
akan secara otomatis menetapkan string sampai"/"
jika pembatas ditemukan2) jika pembatas
"/"
tidak ditemukan maka seluruh string akan ditetapkan... dan jika Anda benar-benar terobsesi dengan kinerja, Anda dapat menambahkan parameter tambahan untuk meledak
explode("/", $mystring, 2)
yang membatasi maksimum elemen yang dikembalikan.sumber
strtok()
tidak aman.strtok()
?strtok()
tidak aman?Terlambat lebih baik daripada tidak sama sekali. php memiliki fungsi yang telah ditentukan untuk itu. ini dia cara yang bagus.
jika Anda ingin mendapatkan bagian sebelum pertandingan cukup atur before_needle (parameter ke-3) ke
true
http://php.net/manual/en/function.strstr.phpsumber
strstr
sedikit lebih cepat daripadastrtok
. Saya akan pergi dengan yang pertama.Function strstr () di PHP 5.3 harus melakukan pekerjaan ini .. Namun parameter ketiga harus disetel ke true ..
Tetapi jika Anda tidak menggunakan 5.3, maka fungsi di bawah ini harus bekerja secara akurat:
Saya belum mengujinya, tetapi ini seharusnya bekerja dengan baik .. Dan ini juga cukup cepat
sumber
strstr()
, tetapi perlu diketahui bahwa itu kembalifalse
jika string tidak mengandung$needle
, sehinggaexplode()
solusi di atas lebih cocok dalam kasus ini.Anda bisa membuat fungsi helper untuk mengatasinya:
Berikut ini adalah use case:
sumber
Anda dapat mencoba menggunakan regex seperti ini:
kadang-kadang, regex lebih lambat, jadi jika kinerja merupakan masalah, pastikan untuk membandingkan ini dengan benar dan menggunakan alternatif lain dengan substring jika lebih cocok untuk Anda.
sumber
explode
itu akan menarik untuk melihat mana yang lebih cepat.Menggunakan
current
padaexplode
akan memudahkan proses.sumber
sumber
Anda juga dapat menggunakan solusi satu baris ini
sumber
Saya pikir ini harus berhasil?
sumber
mengapa tidak menggunakan:
ATAU:
sumber