回答:
explode関数は次のように使用できます。
$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
パラメータには2を指定する必要があります。残りの文字列を含む最後の要素を含める必要があるためです。1はまったく同じ文字列を返します。大きなアレイが作成されない限り、1つのライナーにはElliotバージョンを使用します。
いくつかのセパレータに基づいて文字列を小さな文字列(トークン)に分割するために使用できる文字列関数(strtok)があります。このスレッドの目的のために、最初の単語(最初の空白文字の前にあるものとして定義される)は、空白文字の文字列をトークン化することによって取得できます。Test me more
<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>
詳細と例については、strtok PHPマニュアルページを参照してください。
strtok
グローバルな状態を保持する奇妙で危険な機能です。この関数の使用はお勧めできません。
PHP 5.3を使用している場合
$myvalue = 'Test me more';
echo strstr($myvalue, ' ', true);
場合ことに注意して$myvalue
いる一つの単語と文字列がstrstr
、この場合には何も返しません。解決策は、テスト文字列にスペースを追加することです:
echo strstr( $myvalue . ' ', ' ', true );
文字列に単語が1つしかない場合でも、常に文字列の最初の単語が返されます
代替は次のようなものです:
$i = strpos($myvalue, ' ');
echo $i !== false ? $myvalue : substr( $myvalue, 0, $i );
またはそれを使用して非常に多くの答えがある爆発を使用して、私はそれを行う方法を指摘する気になりません。
strstr
のでPHPで利用可能ですが、オプションのパラメーター(この例で使用しています)が追加されたときです。ただの通知です。私が混乱していたので、なぜこの例が必要であるとあなたが述べるのか、です。4.3.0
5.3.0
before_needle
5.3.0
echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
少し遅いですが、PHPにはこのための1つの優れたソリューションがあります。
$words=str_word_count($myvalue, 1);
echo $words[0];
$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;
よろしく、Ciul
$str='<?php $myvalue = Test me more; ?>';
$s = preg_split("/= *(.[^ ]*?) /", $str,-1,PREG_SPLIT_DELIM_CAPTURE);
print $s[1];
文字列を最初の単語と残りの文字列の2つの部分にトークン化する関数。
戻り値:それぞれ配列first
とremaining
キーを持ち$return
ます。strpos( $title," ") !== false
文字列に単語が1つしかなく、スペースがない場合、最初のチェックは必須です。
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]
特殊文字では機能せず、特殊文字が使用されていると、正しく動作しません。UTF-8に対応していません。
質問は、「文字列内の最初のスペースとそれに続くすべてを何も置換しない」として再定式化できます。したがって、これは単純な正規表現で実現できます。
$firstWord = preg_replace("/\s.*/", '', ltrim($myvalue));
安全のためにltrim()へのオプションの呼び出しを追加しました。この関数は文字列の先頭にあるスペースを削除します。
あなたはこれらの各機能のそれぞれがどれだけ速く知りたい場合は、私はほとんどがここで答えを投票し6の上にPHP 7.3でベンチマークいくつかの粗走った(strpos
とsubstr
、explode
とcurrent
、strstr
、explode
としtrim
、str_word_count
そしてstrtok
その速度を比較するために1,000,000回の反復ごとに)。
<?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>';
?>
2回の連続実行の結果は次のとおりです。
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
そして、関数の順序を逆にした後の結果:
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
結論これらの関数間の速度は大きく異なり、期待されるテスト実行間で一貫性がないことがわかりました。これらの迅速でダーティなテストによれば、選択された6つの関数のいずれでも、妥当な時間内にジョブが実行されます。実行時間を妨げている他の実行中のプロセスを含む摂動があります。したがって、プログラマーにとって最も実用的で読みやすい意味のある関数を使用してください。プログラミングの全体像については、Donald Knuthの文芸的プログラミングを参照してください。
s($str)->words()[0]
にあるように、役立つ場合があります。