web-dev-qa-db-fra.com

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

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 .

123
ali

Vous pouvez utiliser la fonction exploser comme suit:

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

Il existe une fonction de chaîne ( strtok ) qui peut être utilisée pour scinder une chaîne en chaînes plus petites (tokens) en fonction de séparateurs. Pour les besoins de ce fil, le premier mot (défini par tout ce qui précède le premier caractère d'espacement) de Test me more peut être obtenu en tokenizing la chaîne du caractère d'espacement.

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

Pour plus de détails et d’exemples, voir la page de manuel strtok PHP .

250
salathe

Si vous avez PHP 5.3

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

notez que si $myvalue est une chaîne 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 retournera toujours le premier mot de la chaîne, même si la chaîne ne contient qu'un mot

L'alternative est quelque chose comme:

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

Ou bien, avec explose, qui a tellement de réponses à utiliser, je ne vais pas vous expliquer comment le faire.

35
Yacoby

Vous pourriez faire

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

Même s'il est un peu tardif, mais PHP a une meilleure solution pour cela:

$words=str_Word_count($myvalue, 1);
echo $words[0];
9

Juste au cas où vous n'êtes pas sûr que la chaîne commence par un mot ...

$input = ' Test me more ';
echo preg_replace('/(\s*)([^\s]*)(.*)/', '$2', $input); //Test
5
Lupuz
<?php
  $value = "Hello world";
  $tokens = explode(" ", $value);
  echo $tokens[0];
?>

Utilisez simplement exploser pour obtenir chaque mot de l'entrée et générer le premier élément du tableau résultant.

4
Ulf

En utilisant la fonction split, vous pouvez aussi obtenir le premier mot de string.

<?php
$myvalue ="Test me more";
$result=split(" ",$myvalue);
echo $result[0];
?>
4
rekha_sri

Semblable à la réponse acceptée avec une étape en moins:

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

//$first_Word == 'Test'
4
wheelmaker

strtok est plus rapide que extract ou preg_* fonctions.

3
HM2K

personnellement strsplit/explode/strtok ne prend pas en charge les limites de Word. Par conséquent, pour obtenir une division plus précise, utilisez une expression régulière avec le \w

preg_split('/[\s]+/',$string,1);

Cela diviserait les mots avec des limites allant jusqu'à 1.

2
RobertPitt
 $ input = "Testez-moi davantage"; 
 echo preg_replace ("/\s. * $ /", "", $ input); // "Test" 
1
markcial
$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;

Cordialement, Ciul

1
Ciul
public function getStringFirstAlphabet($string){
    $data='';
    $string=explode(' ', $string);
    $i=0;
    foreach ($string as $key => $value) {
        $data.=$value[$i];
    }
    return $data;
}
1
RafayAhmed

Vous pouvez le faire en utilisant PHP string function substr sans convoquer chaîne en tableau.

 $string = 'some text here';
 $stringLength= strlen($string);
 echo ucfirst(substr($string,-$stringLength-1, 1));

//les sorties

0
Afraz Ahmad
$str='<?php $myvalue = Test me more; ?>';
$s = preg_split("/= *(.[^ ]*?) /", $str,-1,PREG_SPLIT_DELIM_CAPTURE);
print $s[1];
0
ghostdog74

Fonction qui tokenize la chaîne en deux parties, d'abord Word et la chaîne restante.

Valeur de retour: La clé first et remaining est dans le tableau $return respectivement . Première vérification strpos( $title," ") !== false est obligatoire dans les cas où la chaîne ne contient qu'un mot et aucun espace.

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;
}
0