173 votes

Comment obtenir le premier mot d'une phrase en PHP ?

Je veux extraire le premier mot d'une variable à partir d'une chaîne de caractères. Par exemple, prenez cette entrée :

<?php $myvalue = 'Test me more'; ?>

La sortie résultante devrait être Test qui est le premier mot de l'entrée. Comment puis-je faire cela ?

0 votes

Vous pourriez trouver s($str)->words()[0] utile, comme on le trouve dans cette bibliothèque autonome .

0 votes

Un petit tableau des cas marginaux potentiels lors de l'obtention de la sous-chaîne avant la première occurrence d'un caractère : stackoverflow.com/a/68123370/2943403

320voto

salathe Points 26305

Il existe une fonction de chaîne de caractères ( strtok ) qui peut être utilisé pour diviser une chaîne de caractères en chaînes plus petites ( jetons ) en fonction d'un ou de plusieurs séparateurs. Pour les besoins de ce fil de discussion, le premier mot (défini comme tout ce qui précède le premier caractère d'espacement) de Test me more peut être obtenu par tokénisation la chaîne de caractères sur le caractère espace.

<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>

Pour plus de détails et d'exemples, voir le Page de manuel PHP de strtok .

4 votes

Brillante ! Mieux que la solution originale

0 votes

Cela devrait être la première réponse. Elle ne renvoie que le premier mot, comme il le voulait, mais de manière plus propre.

2 votes

Bonne solution mais dans le manuel php, il y a un avertissement : Cette fonction peut retourner le booléen FALSE, mais peut aussi retourner une valeur non booléenne qui évalue à FALSE.

286voto

codaddict Points 154968

Vous pouvez utiliser le exploser comme suit :

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

0 votes

Allons jusqu'à 100, ça m'aide :)

52 votes

En utilisant la syntaxe PHP moderne, vous pouvez simplement faire explode(' ',trim($myvalue))[0]

3 votes

Code en 1 ligne pour toute version de PHP : list($firstword) = explode(' ', trim($myvalue), 1);

43voto

Yacoby Points 29771

Si vous avez PHP 5.3

$myvalue = 'Test me more';
echo strstr($myvalue, ' ', true);

Notez que si $myvalue est une chaîne de caractères avec un mot strstr ne renvoie rien dans ce cas. Une solution pourrait être d'ajouter un espace à la chaîne de test :

echo strstr( $myvalue . ' ', ' ', true );

Cela renverra toujours le premier mot de la chaîne, même si la chaîne ne contient qu'un seul mot.

L'alternative est quelque chose comme :

$i = strpos($myvalue, ' ');
echo $i !== false ? $myvalue : substr( $myvalue, 0, $i );

Ou en utilisant explode, qui a tellement de réponses l'utilisant que je ne prendrai pas la peine de vous indiquer comment le faire.

1 votes

+1 pour ne pas utiliser explode ou regex (tous deux inappropriés selon moi). Une autre alternative serait d'utiliser strstr avec str_replace, en remplaçant la partie après l'aiguille de strstr par rien.

1 votes

Il convient de noter que, bien que strstr est disponible en PHP depuis 4.3.0 ce n'était pas avant 5.3.0 lorsque le paramètre facultatif before_needle (que vous utilisez dans cet exemple) a été ajouté. Juste une remarque, parce que j'étais confus, pourquoi vous déclarez, que cet exemple a besoin de 5.3.0 .

0 votes

Notez que si vous définissez myvalue à un seul mot, strstr ne renvoie rien dans ce cas ! Une solution pourrait être de toujours ajouter un espace à la fin de la chaîne de caractères testée, de sorte qu'elle renvoie toujours le premier mot, même si c'est le seul mot de la chaîne !

24voto

AntonioCS Points 3208

Vous pourriez faire

echo current(explode(' ',$myvalue));

0 votes

Cela ne fonctionne pas. Essayez ceci avec cette chaîne : " \n\nNextWord ". Cette réponse suppose que tous les mots sont séparés par des espaces uniquement.

1 votes

L'échantillon de données de la question originale ne contient pas de caractères de début de ligne.

4voto

Ulf Points 1570
<?php
  $value = "Hello world";
  $tokens = explode(" ", $value);
  echo $tokens[0];
?>

Il suffit d'utiliser explode pour récupérer chaque mot de l'entrée et de sortir le premier élément du tableau résultant.

0 votes

Cela ne fonctionne pas. Essayez ceci avec cette chaîne : " \n\nNextWord ". Cette réponse suppose que tous les mots sont séparés par des espaces uniquement.

0 votes

Cette réponse ne limite pas le nombre d'explosions, donc elle fait potentiellement plus de travail que ce qui est requis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X