Je veux extraire le premier mot d'une variable d'une chaîne. Par exemple, prenez cette entrée:
<?php $myvalue = 'Test me more'; ?>
La sortie résultante doit être Test
, qui est le premier mot de l'entrée. Comment puis-je faire ceci?
Je veux extraire le premier mot d'une variable d'une chaîne. Par exemple, prenez cette entrée:
<?php $myvalue = 'Test me more'; ?>
La sortie résultante doit être Test
, qui est le premier mot de l'entrée. Comment puis-je faire ceci?
s($str)->words()[0]
utile, comme trouvé dans cette bibliothèque autonome .Réponses:
Vous pouvez utiliser la fonction d' éclatement comme suit:
la source
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
paramètre doit être 2 car il doit inclure le dernier élément qui contient le reste de la chaîne; 1 retournerait simplement la même chaîne. À moins qu'un grand tableau ne soit créé, j'irais avec la version Elliot pour une seule ligne.Il existe une fonction de chaîne ( strtok ) qui peut être utilisée pour diviser une chaîne en chaînes plus petites ( jetons ) en fonction de certains séparateurs. Pour les besoins de ce fil, le premier mot (défini comme tout avant le premier caractère d'espace) de
Test me more
peut être obtenu en marquant la chaîne sur le caractère d'espace.Pour plus de détails et d'exemples, consultez la page de manuel PHP strtok .
la source
strtok
est une fonction étrange et dangereuse qui détient un état global. L'utilisation de cette fonction doit être déconseillée.Si vous avez PHP 5.3
notez que if
$myvalue
est une chaîne avec un motstrstr
ne renvoie rien dans ce cas. Une solution pourrait être d'ajouter un espace à la chaîne de test: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:
Ou en utilisant exploser, qui a tellement de réponses que je ne prendrai pas la peine de montrer comment le faire.
la source
strstr
soit disponible en PHP car4.3.0
il ne l'était pas avant5.3.0
, lorsque le paramètre facultatifbefore_needle
(que vous utilisez dans cet exemple) a été ajouté. Juste un avis, parce que j'étais confus, pourquoi vous dites que cet exemple a besoin5.3.0
.echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Vous pourriez faire
la source
Même s'il est peu tard, PHP a une meilleure solution pour cela:
la source
Similaire à la réponse acceptée avec une étape en moins:
la source
Juste au cas où vous n'êtes pas sûr que la chaîne commence par un mot ...
la source
trim($input)
suffirait dans ce cas: PUtilisez simplement exploser pour obtenir chaque mot de l'entrée et sortir le premier élément du tableau résultant.
la source
En utilisant la fonction de fractionnement, vous pouvez également obtenir le premier mot de la chaîne.
la source
strtok
est plus rapide queextract
oupreg_*
fonctionne.la source
la source
personnellement
strsplit
/explode
/strtok
ne prend pas en charge les limites de mots, donc pour obtenir un partage plus précis, utilisez une expression régulière avec\w
Cela diviserait les mots avec des limites jusqu'à une limite de 1.
la source
Cordialement, Ciul
la source
la source
Vous pouvez le faire en utilisant la fonction de chaîne PHP substr sans convertir la chaîne en tableau.
//les sorties
la source
la source
Fonction qui segmentera la chaîne en deux parties, le premier mot et la chaîne restante.
Valeur de retour: Il aura
first
etremaining
clé$return
respectivement tableau. La première vérificationstrpos( $title," ") !== false
est obligatoire dans le cas où la chaîne ne contient qu'un seul mot et pas d'espace.la source
$ first_word = str_word_count (1) [0]
Ne fonctionne pas sur les caractères spéciaux et entraînera un comportement incorrect si des caractères spéciaux sont utilisés. Ce n'est pas compatible UTF-8.
Pour plus d'informations, vérifiez si PHP str_word_count () est sécurisé sur plusieurs octets?
la source
Puisque vous ne pouvez pas vérifier avec le trait pour les majuscules ou les minuscules, cela fonctionne parfaitement pour vérifier le premier mot.
la source
Votre question pourrait être reformulée comme "remplacer dans la chaîne le premier espace et tout ce qui suit par rien". Cela peut donc être réalisé avec une simple expression régulière:
J'ai ajouté un appel optionnel à ltrim () pour être sûr: cette fonction supprime les espaces au début de la chaîne.
la source
Toutes les réponses ici utilisent une approche selon laquelle le processeur doit rechercher toute la chaîne même si le premier mot est trouvé! Pour les grosses cordes, ce n'est pas recommandé. Cette approche est optimale:
la source
Si vous voulez savoir à quelle vitesse chacune de ces fonctions est, j'ai couru une analyse comparative brut en PHP 7.3 sur les six réponses les plus voté ici (
strpos
avecsubstr
,explode
aveccurrent
,strstr
,explode
avectrim
,str_word_count
etstrtok
) avec 1.000.000 itérations chacun pour comparer leurs vitesses.Voici les différents résultats de 2 exécutions consécutives:
Et les résultats après avoir inversé l'ordre des fonctions:
Conclusion Il s'avère que la vitesse entre ces fonctions varie considérablement et n'est pas aussi cohérente entre les exécutions de test que vous pourriez vous y attendre. Selon ces tests rapides et sales, n'importe laquelle des six fonctions choisies fera le travail dans un laps de temps raisonnable. Il y a des perturbations, y compris d'autres processus en cours d'exécution qui interfèrent avec les temps d'exécution. Alors utilisez simplement la fonction qui vous convient le mieux en tant que programmeur. Pour une vue d'ensemble de la programmation, voir Literate Programming de Donald Knuth .
la source