Saya ingin mengekstrak kata pertama dari sebuah variabel dari sebuah string. Misalnya, ambil input ini:
<?php $myvalue = 'Test me more'; ?>
Keluaran yang dihasilkan harus Test
, yang merupakan kata pertama dari input. Bagaimana saya bisa melakukan ini?
s($str)->words()[0]
bermanfaat, seperti yang ditemukan di perpustakaan mandiri ini .Jawaban:
Anda dapat menggunakan fungsi meledak sebagai berikut:
sumber
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
parameter harus 2 karena harus menyertakan elemen terakhir yang berisi sisa string; Saya hanya akan mengembalikan string yang sama. Kecuali jika array besar akan dibuat saya akan pergi dengan versi Elliot untuk satu liner.Ada fungsi string ( strtok ) yang dapat digunakan untuk membagi string menjadi string yang lebih kecil ( token ) berdasarkan beberapa pemisah. Untuk keperluan utas ini, kata pertama (didefinisikan sebagai apa saja sebelum karakter spasi pertama)
Test me more
dapat diperoleh dengan tokenizing string pada karakter spasi.Untuk detail dan contoh lebih lanjut, lihat halaman manual PHP strtok .
sumber
strtok
adalah fungsi aneh dan berbahaya yang memegang status global. Menggunakan fungsi ini harus dicegah.Jika Anda memiliki PHP 5.3
perhatikan bahwa jika
$myvalue
string dengan satu katastrstr
tidak mengembalikan apa pun dalam kasus ini. Solusi bisa berupa menambahkan ruang ke string-test:Itu akan selalu mengembalikan kata pertama dari string, bahkan jika string hanya memiliki satu kata di dalamnya
Alternatifnya adalah sesuatu seperti:
Atau menggunakan meledak, yang memiliki begitu banyak jawaban menggunakannya saya tidak akan repot-repot menunjukkan bagaimana melakukannya.
sumber
strstr
tersedia dalam PHP karena4.3.0
bukan sebelumnya5.3.0
, ketika parameter opsionalbefore_needle
(yang Anda gunakan dalam contoh ini) ditambahkan. Hanya pemberitahuan, karena saya bingung, mengapa Anda menyatakan, bahwa contoh ini perlu5.3.0
.echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Anda bisa melakukannya
sumber
Meskipun sedikit terlambat, tetapi PHP memiliki satu solusi yang lebih baik untuk ini:
sumber
Mirip dengan jawaban yang diterima dengan satu langkah lebih sedikit:
sumber
Kalau-kalau Anda tidak yakin string dimulai dengan sebuah kata ...
sumber
trim($input)
akan cukup dalam hal ini: PCukup gunakan explode untuk mendapatkan setiap kata dari input dan output elemen pertama dari array yang dihasilkan.
sumber
Menggunakan fungsi split juga Anda bisa mendapatkan kata pertama dari string.
sumber
strtok
lebih cepat dariextract
ataupreg_*
fungsinya.sumber
sumber
secara pribadi
strsplit
/explode
/strtok
tidak mendukung batas kata, jadi untuk mendapatkan pemisahan yang lebih tepat gunakan ekspresi reguler dengan\w
Ini akan membagi kata dengan batas sampai batas 1.
sumber
Salam, Ciul
sumber
sumber
Anda dapat melakukannya menggunakan substr fungsi fungsi PHP tanpa menggabungkan string ke dalam array.
// keluaran S
sumber
sumber
Fungsi yang akan mengubah string menjadi dua bagian, kata pertama dan string yang tersisa.
Nilai Pengembalian: Masing-masing akan memiliki
first
danremaining
memasukkan dalam$return
array. cek pertamastrpos( $title," ") !== false
adalah wajib jika string hanya memiliki satu kata dan tidak ada ruang di dalamnya.sumber
$ first_word = str_word_count (1) [0]
Tidak berfungsi pada karakter khusus, dan akan menghasilkan perilaku yang salah jika karakter khusus digunakan. Itu tidak ramah UTF-8.
Untuk info lebih lanjut, periksa apakah PHP str_word_count () multibyte aman?
sumber
Karena Anda tidak dapat memeriksa dengan stroke untuk huruf besar atau kecil, ini berfungsi dengan baik untuk memeriksa kata pertama.
sumber
Pertanyaan Anda dapat dirumuskan ulang sebagai "ganti string pertama dengan ruang dan semua yang tidak diikuti". Jadi ini dapat dicapai dengan ekspresi reguler sederhana:
Saya telah menambahkan panggilan opsional ke ltrim () agar aman: fungsi ini menghilangkan spasi di awal string.
sumber
Semua jawaban di sini menggunakan pendekatan yang dibutuhkan prosesor untuk mencari semua string bahkan jika kata pertama ditemukan! Untuk string besar, ini tidak disarankan. Pendekatan ini optimal:
sumber
Jika Anda ingin tahu seberapa cepat masing-masing fungsi masing adalah, aku berlari beberapa mentah benchmarking di PHP 7.3 pada enam yang paling sebagai jawaban di sini (
strpos
dengansubstr
,explode
dengancurrent
,strstr
,explode
dengantrim
,str_word_count
danstrtok
) dengan 1.000.000 iterasi masing-masing untuk membandingkan kecepatan mereka.Berikut adalah hasil yang bervariasi dari 2 kali berturut-turut:
Dan hasilnya setelah membalik urutan fungsi:
Kesimpulan Ternyata kecepatan antara fungsi-fungsi ini sangat bervariasi dan tidak konsisten antara tes berjalan seperti yang Anda harapkan. Menurut tes cepat dan kotor ini, salah satu dari enam fungsi yang dipilih akan menyelesaikan pekerjaan dalam jumlah waktu yang wajar. Ada gangguan termasuk proses lain yang berjalan yang mengganggu waktu eksekusi. Jadi gunakan saja fungsi apa pun yang masuk akal bagi Anda sebagai seorang programmer. Untuk gambaran pemrograman yang lebih besar, lihat Pemrograman Sastra Donald Knuth .
sumber