2017-04-05 1 views
1

Je veux séparer les mots d'une chaîne. par exemple, ma chaîne est "Dans le #name de dieu" et j'ai besoin du "nom" seulement !! mais quand j'utilise cette snipet, me retourner "nom de Dieu"Php - diviser le mot spécifique par explode en chaîne

$string = "In the #name of god";  
$word = explode('#', $string); 
echo $word; 
+1

'$ word' est un tableau, quand vous faites écho, vous ne verrez pas' name of god' –

+0

vous utilisez l'exportation ici dans un mauvais contexte. La fonction 'explode()' casse une chaîne en un tableau. – webpic

+0

@u_mulder, Array ([0] => Dans le [1] => nom de dieu) – Ehsan

Répondre

5
$string = "In the #name of god"; 

// Using `explode` 
$word = @reset(explode(' ', end(explode('#', $string)))); 
echo $word; // 'name' 

// Using `substr` 
$pos1 = strpos($string, '#'); 
$pos2 = strpos($string, ' ', $pos1) - $pos1; 
echo substr($string, $pos1 + 1, $pos2); // 'name' 

Note: Le caractère @ avant que la fonction reset est un Error Control Operators. Il évite d'afficher un message d'avertissement lors de l'utilisation de la fonction end avec une variable sans référence, et oui, c'est une mauvaise pratique. Vous devez créer votre propre variable et passer à la fonction end. Comme ceci:

// Using `explode` 
$segments = explode('#', $string); 
$segments = explode(' ', end($segments)); 
$word = reset($segments); 
echo $word; // 'name' 
0

EDIT

Désolé, je viens readed mal.

Explode convertit une chaîne en tableau. Ainsi, votre sortie aboutira à ["Dans le", "nom de dieu"]. Si vous voulez en saisir un mot, vous devez être plus précis sur la façon dont cela fonctionnera. Si vous voulez juste attraper le premier mot après un hashtag, vous devez utiliser strpos et substr.

$string = "In the #name of god"; 
$hashtag_pos = strpos($string, "#"); 
if($hashtag_pos === false) 
    echo ""; // hashtag not found 
else { 
    $last_whitespace_after_hashtag = strpos($string, " ", $hashtag_pos); 
    $len = $last_whitespace_after_hashtag === false ? strlen($string)-($hashtag_pos+1) : $last_whitespace_after_hashtag - ($hashtag_pos+1); 
    echo substr($string, $hashtag_pos+1, strpos($string, " ", $len)); 
} 
+0

Cela ne renvoie certainement pas 'name' –

+0

Ops, j'ai vraiment raté cette partie. J'y travaille. –

+0

@Daan L'a corrigé. –

1

essayer regex et preg_match

$string = "In the #name of god"; 
preg_match('/(?<=#)\w+/', $string, $matches); 

print_r($matches); 

Sortie:

Array ([0] => name) 
+0

Cela renvoie également un tableau? une chaîne a été demandée dans la question – RiggsFolly

+0

@RiggsFolly oui, mais '$ matches [0]' aura la chaîne requise et la complexité est très inférieure à cela. –

+1

suggère également d'utiliser 'preg_match_all' pour obtenir toutes les occurrences – knetsi

0

Il y a deux options (aussi preg_match aiderait à plusieurs instances de '#')

<?php 
//With Explode only (meh) 
$sen = "In the #name of god"; 
$w = explode(' ', explode('#',$sen)[1])[0]; 

echo $w; 

//With substr and strpos 
$s = strpos($sen , '#')+1; // find where # is 
$e = strpos(substr($sen, $s), ' ')+1; //find i 
$w = substr($sen, $s, $e); 

echo $w; 

//with substr, strpos and explode 
$w = explode(' ', substr($sen, strpos($sen , '#')+1))[0]; 
echo $w;