如何在PHP中获得句子的第一个单词?

ali*_*ali 141 php string extract text-segmentation

我想从字符串中提取变量的第一个单词.例如,请输入以下内容:

<?php $myvalue = 'Test me more'; ?>
Run Code Online (Sandbox Code Playgroud)

结果输出应该是Test输入的第一个字.我怎样才能做到这一点?

sal*_*the 266

有一个字符串函数(strtok)可用于根据某些分隔符将字符串拆分为较小的字符串(标记).出于此线程的目的,Test me more可以通过对空格字符上的字符串进行标记来获得第一个单词(定义为第一个空格字符之前的任何内容).

<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息和示例,请参阅strtok PHP手册页.

  • Briliiant!比原始解决方案更好 (3认同)
  • `strtok` 是一个奇怪而危险的函数,它保存着一个全局状态。不鼓励使用此功能。 (3认同)
  • 很好的解决方案,但在 php 手册中,它警告:此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。 (2认同)
  • 我每天都使用 PHP 至少 6 年了,直到现在我才听说过这个功能 (2认同)

cod*_*ict 229

您可以使用explode功能,如下所示:

$myvalue = 'Test me more';
$arr = explode(' ',trim($myvalue));
echo $arr[0]; // will print Test
Run Code Online (Sandbox Code Playgroud)

  • 使用现代PHP语法,你可以做`explode('',trim($ myvalue))[0]` (37认同)
  • @CédricFrançoys的limit参数应该为2,因为它必须包含包含字符串其余部分的最后一个元素;1只会返回相同的字符串。除非创建一个大型阵列,否则我将使用Elliot版本的一个衬板。 (3认同)
  • 任何PHP版本的1行代码:`list($ firstword)= explode('',trim($ myvalue),1);` (2认同)

Yac*_*oby 36

如果你有PHP 5.3

$myvalue = 'Test me more';
echo strstr($myvalue, ' ', true);
Run Code Online (Sandbox Code Playgroud)

请注意,如果$myvalue是包含一个单词的字符串,strstr则在这种情况下不返回任何内容.解决方案可以是在测试字符串中附加一个空格:

echo strstr( $myvalue . ' ', ' ', true );
Run Code Online (Sandbox Code Playgroud)

这将始终返回字符串的第一个单词,即使该字符串中只有一个单词

替代方案如下:

$i = strpos($myvalue, ' ');
echo $i !== false ? $myvalue : substr( $myvalue, 0, $i );
Run Code Online (Sandbox Code Playgroud)

或者使用explode,它有很多使用它的答案,我不打算指出如何做到这一点.


Ant*_*oCS 23

你可以做到

echo current(explode(' ',$myvalue));
Run Code Online (Sandbox Code Playgroud)


小智 12

虽然现在还不晚,但PHP有一个更好的解决方案:

$words=str_word_count($myvalue, 1);
echo $words[0];
Run Code Online (Sandbox Code Playgroud)


whe*_*ker 6

与已接受的答案类似,但少了一步:

$my_value = 'Test me more';
$first_word = explode(' ',trim($my_value))[0];

//$first_word == 'Test'
Run Code Online (Sandbox Code Playgroud)


Lup*_*puz 5

万一你不确定字符串是否以单词开头......

$input = ' Test me more ';
echo preg_replace('/(\s*)([^\s]*)(.*)/', '$2', $input); //Test
Run Code Online (Sandbox Code Playgroud)