Bagaimana cara mendapatkan karakter terakhir dari string di PHP?
476
Saya perlu mendapatkan karakter terakhir dari sebuah string. Katakanlah saya memiliki "penguji" sebagai string input dan saya ingin hasilnya menjadi "s". bagaimana saya bisa melakukannya di PHP?
Jika Anda menggunakan penyandian karakter multibyte seperti UTF-8, gunakan mb_substr( php.net/mb_substr ) sebagai gantinya.
Gumbo
9
begitu banyak untuk substr ($ string, strlen ($ string) -1, 1) ;. Sepertinya saya sudah mengambil jalan PANJANG!
jeffkee
4
Anda hanya perlu fungsi string multibyte jika string dievaluasi sebagai string biner. Aka, ketika php tidak tahu encoding. Kalau tidak, fungsi string non multibyte khas akan bekerja dengan baik.
Perhatikan bahwa ini tidak berfungsi untuk string multibyte. Jika Anda perlu bekerja dengan string multibyte, pertimbangkan untuk menggunakan mb_*rangkaian fungsi string.
Pada PHP 7.1.0 indeks numerik negatif juga didukung, misalnya adil $string[-1];
Saya suka jawaban gaya C ini, saya bertanya-tanya mengapa ini hanya mendapat beberapa upvotes ini.
Valentin Mercier
16
@ValentinMercier: Karena ini adalah pertanyaan PHP, bukan C.
Martin Thoma
1
Saya pikir ini adalah solusi yang lebih baik karena memungkinkan Anda untuk memodifikasi karakter, sedangkan solusi substr yang diberikan di atas tidak.
cazort
Perhatikan bahwa ini akan memberikan pemberitahuan jika string kosong.
Terima kasih telah mengirim tolok ukur! Jika ada yang tertarik dengan tolok ukur C # untuk melakukan hal yang sama, halaman ini adalah bacaan yang bagus. Langsung mengakses karakter terakhir dimenangkan.
dapatkah Anda menjelaskan lebih lanjut tentang perbedaan antara [] dan {} dalam konteks ini?
Taufik Nur Rahmanda
2
@TaufikNurRahmanda Secara teknis tidak ada perbedaan antara [] dan {}. Pengembang PHP memberikan opsi untuk menggunakan keduanya. Untuk perincian lebih lanjut, lihat: php.net/manual/en/migration71.new-features.php
RyanNerd
apa itu akses array dan apa itu akses string langsung? @RyanNerd afaik itu adalah 2 hal yang sama, bukan?
Saya tidak dapat meninggalkan komentar, tetapi sehubungan dengan jawaban FastTrack, juga ingat bahwa akhir baris mungkin hanya satu karakter. saya akan menyarankan
substr(trim($string),-1)
EDIT: Kode saya di bawah ini diedit oleh seseorang, membuatnya tidak melakukan apa yang saya sebutkan. Saya telah memulihkan kode asli saya dan mengubah kata-katanya agar lebih jelas.
trim(atau rtrim) akan menghapus semua spasi putih, jadi jika Anda perlu memeriksa spasi, tab, atau spasi putih lainnya, ganti secara manual berbagai ujung baris terlebih dahulu:
Pada PHP 7.1.0, offset string negatif juga didukung. Jadi, jika Anda mengikuti perkembangan zaman, Anda dapat mengakses karakter terakhir dalam string seperti ini:
Menggunakan offset negatif adalah teknik yang disebutkan bertahun-tahun sebelumnya oleh RyanNerd. Silakan kirim jawaban hanya ketika Anda memiliki wawasan yang unik dan berharga untuk dibagikan.
mickmackusa
@mickmackusa Mengapa Anda menulis hanya untuk saya dan mengabaikan beberapa variasi substr ()?
nektobit
Bukan masalah pribadi, saya hanya melihat jawaban Anda yang sangat pendek dan berlebihan dan memutuskan untuk meniup peluit saya. Jangan ragu untuk mengungkap jawaban lain jika Anda merasa tidak menambah nilai. Perlu diingat, dua jawaban dapat menyarankan teknik yang sama tetapi keduanya bernilai secara individual karena apa yang dijelaskan. Ini adalah tempat pendidikan dan pemberdayaan - menambahkan wawasan unik untuk solusi yang ditawarkan sebelumnya bisa sangat berharga bagi para peneliti.
mickmackusa
Sebagai contoh, jawaban saya ini diposting sebulan setelah teknik yang sama diposting. Saya akan menulis komentar di bawah jawaban sebelumnya, tetapi ketika saya mengetik semua informasi yang ingin saya tawarkan, itu jelas terlalu banyak untuk komentar yang masuk akal. Saya memposting jawaban baru dan menambahkan banyak wawasan gratis dan informasi latar belakang mengenai teknik ini dan termasuk tolok ukur. Ini adalah bagaimana solusi non-unik dapat bermanfaat bagi para peneliti.
mickmackusa
5
Saya akan menyarankan untuk mencari solusi Gordon karena lebih berkinerja daripada substr ():
----------------------------------10000000 repetitions...----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Dapat mengkonfirmasi ini. Semakin lama string Anda, semakin besar perbedaan kinerja. Dalam pengujian saya dengan 10 karakter substr adalah sekitar 20% lebih lambat
Philipp
Tidak mengherankan karena substr () memiliki overhead panggilan fungsi dan yang lainnya adalah "C like" manipulasi string langsung. BTW saya menjalankan kode ini di PHP 7.1-dev dengan hasil: substr () mengambil 7.090255022049seconds \ akses array mengambil 2.3145787715912seconds
RyanNerd
4
Ingat, jika Anda memiliki string yang dibaca sebagai baris dari file teks menggunakan fgets()fungsi, Anda harus menggunakan substr($string, -3, 1)sehingga Anda mendapatkan karakter aktual dan bukan bagian dari CRLF (Carriage Return Line Feed).
Saya tidak berpikir orang yang mengajukan pertanyaan memerlukan ini, tetapi bagi saya, saya mengalami kesulitan mendapatkan karakter terakhir dari string dari file teks jadi saya yakin orang lain akan menemukan masalah yang sama.
s($str)->end()
bermanfaat, seperti yang ditemukan di perpustakaan mandiri ini .Jawaban:
Atau, untuk string multibytes:
sumber
mb_substr
( php.net/mb_substr ) sebagai gantinya.sumber
Atau dengan akses string langsung :
Perhatikan bahwa ini tidak berfungsi untuk string multibyte. Jika Anda perlu bekerja dengan string multibyte, pertimbangkan untuk menggunakan
mb_*
rangkaian fungsi string.Pada PHP 7.1.0 indeks numerik negatif juga didukung, misalnya adil
$string[-1];
sumber
Dari PHP 7.1 Anda dapat melakukan ini ( rfc yang diterima untuk offset string negatif ):
Saya akan membiarkan Anda menebak hasilnya.
Juga, saya menambahkan ini ke kode kinerja xenonite dengan hasil ini:
sumber
Saya tidak dapat meninggalkan komentar, tetapi sehubungan dengan jawaban FastTrack, juga ingat bahwa akhir baris mungkin hanya satu karakter. saya akan menyarankan
EDIT: Kode saya di bawah ini diedit oleh seseorang, membuatnya tidak melakukan apa yang saya sebutkan. Saya telah memulihkan kode asli saya dan mengubah kata-katanya agar lebih jelas.
trim
(ataurtrim
) akan menghapus semua spasi putih, jadi jika Anda perlu memeriksa spasi, tab, atau spasi putih lainnya, ganti secara manual berbagai ujung baris terlebih dahulu:sumber
Pada PHP 7.1.0, offset string negatif juga didukung. Jadi, jika Anda mengikuti perkembangan zaman, Anda dapat mengakses karakter terakhir dalam string seperti ini:
DEMO
Atas permintaan @mickmackusa, saya melengkapi jawaban saya dengan cara aplikasi yang memungkinkan:
sumber
Saya akan menyarankan untuk mencari solusi Gordon karena lebih berkinerja daripada substr ():
menghasilkan sesuatu seperti
sumber
Ingat, jika Anda memiliki string yang dibaca sebagai baris dari file teks menggunakan
fgets()
fungsi, Anda harus menggunakansubstr($string, -3, 1)
sehingga Anda mendapatkan karakter aktual dan bukan bagian dari CRLF (Carriage Return Line Feed).Saya tidak berpikir orang yang mengajukan pertanyaan memerlukan ini, tetapi bagi saya, saya mengalami kesulitan mendapatkan karakter terakhir dari string dari file teks jadi saya yakin orang lain akan menemukan masalah yang sama.
sumber
Anda dapat menemukan karakter terakhir menggunakan banyak cara php seperti substr () dan mb_substr () .
Di sini saya dapat menunjukkan kepada Anda berdua contoh:
LIVE DEMO
sumber
String dalam berbagai bahasa termasuk C sharp dan PHP juga dianggap sebagai array karakter.
Mengetahui bahwa dalam operasi array teori harus lebih cepat daripada yang bisa Anda lakukan,
Namun, fungsi array standar suka
tidak akan bekerja pada string.
sumber
Siemano, dapatkan hanya file php dari direktori yang dipilih:
sumber