Cara standar PHP untuk menguji apakah sebuah string $str
diakhiri dengan substring $test
adalah:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Apakah ini cara tercepat?
php
string
performance
Jason Cohen
sumber
sumber
s($str)->endsWith($test)
ataus($str)->endsWithIgnoreCase($test)
membantu, seperti yang ditemukan di perpustakaan mandiri ini .Jawaban:
Apa yang dikatakan Assaf benar. Ada fungsi bawaan di PHP untuk melakukan hal itu.
Jika
$test
lebih panjang dari$str
PHP akan memberikan peringatan, jadi Anda perlu memeriksanya terlebih dahulu.sumber
Metode ini sedikit lebih mahal untuk memori, tetapi lebih cepat:
Ini paling baik ketika Anda tahu persis apa jarum itu, sehingga Anda dapat membuat kode keras untuk membalikkannya. Jika Anda membalik jarum secara terprogram, ini menjadi lebih lambat dari metode sebelumnya.
sumber
stripos
akan mengulangi seluruh string dalam kasus terburuk sedangkansubstr_compare
akan membandingkan paling banyak panjang jarum. Ya,substr_compare
memerlukan penghitungan panjang tumpukan jerami (dan jarum yang jauh lebih kecil), tetapi metode ini memerlukannya dan menyalinnya secara penuh, dan mungkin mengubah semuanya menjadi huruf kecil untuk boot.substr_compare()
berfungsi dengan baik.Offset negatif "mulai menghitung dari akhir string".
sumber
Berikut cara sederhana untuk memeriksa apakah satu string diakhiri dengan yang lain, dengan memberikan
strpos
offset tepat di tempat string tersebut harus ditemukan:Mudah, dan saya pikir ini akan berfungsi di PHP 4.
sumber
Itu tergantung pada efisiensi seperti apa yang Anda pedulikan.
Versi Anda menggunakan lebih banyak memori karena salinan ekstra dari penggunaan media.
Versi alternatif mungkin mencari string asli untuk kemunculan terakhir substring tanpa membuat salinan, tetapi mungkin akan lebih lambat karena pengujian lebih lanjut.
Mungkin cara yang paling efisien adalah dengan melakukan loop char-by-char dari posisi -sterlen (test) sampai akhir string dan bandingkan. Itulah jumlah minimal perbandingan yang dapat Anda lakukan dan hampir tidak ada memori tambahan yang digunakan.
sumber
Cara lain adalah dengan menggunakan
strrpos
fungsi :Tapi itu tidak lebih cepat.
sumber
Saya berharap jawaban di bawah ini bisa efisien dan juga sederhana:
sumber
Tidak tahu apakah ini cepat atau tidak tetapi untuk tes karakter tunggal, ini juga berfungsi:
sumber
cara termudah untuk memeriksanya melalui ekspresi reguler
misalnya untuk memeriksa apakah email yang diberikan adalah gmail:
sumber
Saya berpikir fungsi kebalikan seperti strrchr () akan membantu Anda mencocokkan akhir string paling cepat.
sumber
Ini adalah PHP murni, tanpa memanggil fungsi eksternal, kecuali untuk strlen .
sumber
untuk jarum satu karakter:
sumber