Jawaban:
Anda dapat menggunakan fungsi meledak sebagai berikut:
$myvalue = 'Test me more';
$arr = explode(' ',trim($myvalue));
echo $arr[0]; // will print Test
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.
<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>
Untuk detail dan contoh lebih lanjut, lihat halaman manual PHP strtok .
strtok
adalah fungsi aneh dan berbahaya yang memegang status global. Menggunakan fungsi ini harus dicegah.
Jika Anda memiliki PHP 5.3
$myvalue = 'Test me more';
echo strstr($myvalue, ' ', true);
perhatikan bahwa jika $myvalue
string dengan satu kata strstr
tidak mengembalikan apa pun dalam kasus ini. Solusi bisa berupa menambahkan ruang ke string-test:
echo strstr( $myvalue . ' ', ' ', true );
Itu akan selalu mengembalikan kata pertama dari string, bahkan jika string hanya memiliki satu kata di dalamnya
Alternatifnya adalah sesuatu seperti:
$i = strpos($myvalue, ' ');
echo $i !== false ? $myvalue : substr( $myvalue, 0, $i );
Atau menggunakan meledak, yang memiliki begitu banyak jawaban menggunakannya saya tidak akan repot-repot menunjukkan bagaimana melakukannya.
strstr
tersedia dalam PHP karena 4.3.0
bukan sebelumnya 5.3.0
, ketika parameter opsional before_needle
(yang Anda gunakan dalam contoh ini) ditambahkan. Hanya pemberitahuan, karena saya bingung, mengapa Anda menyatakan, bahwa contoh ini perlu 5.3.0
.
echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Meskipun sedikit terlambat, tetapi PHP memiliki satu solusi yang lebih baik untuk ini:
$words=str_word_count($myvalue, 1);
echo $words[0];
Mirip dengan jawaban yang diterima dengan satu langkah lebih sedikit:
$my_value = 'Test me more';
$first_word = explode(' ',trim($my_value))[0];
//$first_word == 'Test'
secara pribadi strsplit
/ explode
/ strtok
tidak mendukung batas kata, jadi untuk mendapatkan pemisahan yang lebih tepat gunakan ekspresi reguler dengan\w
preg_split('/[\s]+/',$string,1);
Ini akan membagi kata dengan batas sampai batas 1.
$string = ' Test me more ';
preg_match('/\b\w+\b/i', $string, $result); // Test
echo $result;
/* You could use [a-zA-Z]+ instead of \w+ if wanted only alphabetical chars. */
$string = ' Test me more ';
preg_match('/\b[a-zA-Z]+\b/i', $string, $result); // Test
echo $result;
Salam, Ciul
public function getStringFirstAlphabet($string){
$data='';
$string=explode(' ', $string);
$i=0;
foreach ($string as $key => $value) {
$data.=$value[$i];
}
return $data;
}
Anda dapat melakukannya menggunakan substr fungsi fungsi PHP tanpa menggabungkan string ke dalam array.
$string = 'some text here';
$stringLength= strlen($string);
echo ucfirst(substr($string,-$stringLength-1, 1));
// keluaran S
$str='<?php $myvalue = Test me more; ?>';
$s = preg_split("/= *(.[^ ]*?) /", $str,-1,PREG_SPLIT_DELIM_CAPTURE);
print $s[1];
Fungsi yang akan mengubah string menjadi dua bagian, kata pertama dan string yang tersisa.
Nilai Pengembalian: Masing-masing akan memiliki first
dan remaining
memasukkan dalam $return
array. cek pertama strpos( $title," ") !== false
adalah wajib jika string hanya memiliki satu kata dan tidak ada ruang di dalamnya.
function getStringFirstWord( $title ){
$return = [];
if( strpos( $title," ") !== false ) {
$firstWord = strstr($title," ",true);
$remainingTitle = substr(strstr($title," "), 1);
if( !empty( $firstWord ) ) {
$return['first'] = $firstWord;
}
if( !empty( $remainingTitle ) ) {
$return['remaining'] = $remainingTitle;
}
}
else {
$return['first'] = $title;
}
return $return;
}
$ 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?
Pertanyaan Anda dapat dirumuskan ulang sebagai "ganti string pertama dengan ruang dan semua yang tidak diikuti". Jadi ini dapat dicapai dengan ekspresi reguler sederhana:
$firstWord = preg_replace("/\s.*/", '', ltrim($myvalue));
Saya telah menambahkan panggilan opsional ke ltrim () agar aman: fungsi ini menghilangkan spasi di awal string.
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:
function getFirstWord($string) {
$result = "";
foreach($string as $char) {
if($char == " " && strlen($result)) {
break;
}
$result .= $char;
}
return $result;
}
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
dengan substr
, explode
dengan current
, strstr
, explode
dengan trim
, str_word_count
dan strtok
) dengan 1.000.000 iterasi masing-masing untuk membandingkan kecepatan mereka.
<?php
$strTest = 'This is a string to test fetching first word of a string methods.';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
$p = strpos($strTest, ' ');
$p !== false ? $strTest : substr( $strTest, 0, $p );
}
$after = microtime(true);
echo 'strpos/ substr: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
strstr($strTest, ' ', true);
}
$after = microtime(true);
echo 'strstr: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
current(explode(' ',$strTest));
}
$after = microtime(true);
echo 'explode/ current: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
$arr = explode(' ',trim($strTest));
$arr[0];
}
$after = microtime(true);
echo 'explode/ trim: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
str_word_count($strTest, 1);
}
$after = microtime(true);
echo 'str_word_count: '.($after-$before)/$i . ' seconds<br>';
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
strtok($value, ' ');
}
$after = microtime(true);
echo 'strtok: '.($after-$before)/$i . ' seconds<br>';
?>
Berikut adalah hasil yang bervariasi dari 2 kali berturut-turut:
strpos/ substr: 6.0736894607544E-8 seconds
strstr: 5.0434112548828E-8 seconds
explode/ current: 3.5163116455078E-7 seconds
explode/ trim: 3.8683795928955E-7 seconds
str_word_count: 4.6665270328522E-6 seconds
strtok: 4.9849510192871E-7 seconds
strpos/ substr: 5.7171106338501E-8 seconds
strstr: 4.7624826431274E-8 seconds
explode/ current: 3.3753299713135E-7 seconds
explode/ trim: 4.2293286323547E-7 seconds
str_word_count: 3.7025549411774E-6 seconds
strtok: 1.2249300479889E-6 seconds
Dan hasilnya setelah membalik urutan fungsi:
strtok: 4.2612719535828E-7 seconds
str_word_count: 4.1899878978729E-6 seconds
explode/ trim: 9.3175292015076E-7 seconds
explode/ current: 7.0811605453491E-7 seconds
strstr: 1.0137891769409E-7 seconds
strpos/ substr: 1.0082197189331E-7 seconds
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 .
s($str)->words()[0]
bermanfaat, seperti yang ditemukan di perpustakaan mandiri ini .