2010-02-08 5 views
4

J'ai ceci:obtenir le numéro devant « underscore » avec php

15_some_text_or_numbers; 

Je veux obtenir ce qui est en face de la première underscore. Il y a toujours une lettre directement après le premier trait de soulignement.

exemple:

14_hello_world = 14 

Le résultat est le numéro 14!

Merci

+0

double possible de [Tout ce dont après un certain caractère] (https://stackoverflow.com/questions/11405493/get-everything-after-a-certain-character) – kenorb

Répondre

10

S'il y a toujours un numéro devant, vous pouvez utiliser

echo (int) '14_hello_world'; 

Voir l'entrée sur String conversion to integers in the PHP manual

Voici une version sans transtypage:

$str = '14_hello_1world_12'; 
echo substr($str, 0, strpos($str, '_')); 

Notez que ce wil Je ne retourne rien, si aucun trait de soulignement n'est trouvé. Si trouvé, la valeur de retour sera une chaîne, alors que le résultat typecasted sera un entier (pas que cela aurait beaucoup d'importance). Si vous souhaitez plutôt la chaîne entière à retourner en l'absence de trait de soulignement existe, vous pouvez utiliser

$str = '14_hello_1world_12'; 
echo str_replace(strstr($str, '_'), '', $str); 

Au PHP5.3, vous pouvez également utiliser strstr avec $before_needle ensemble true

echo strstr('14_hello_1world_12', '_', true); 

Note: Comme le typage de chaîne en entier en PHP suit un comportement bien défini et prévisible et que ce comportement suit les règles de strtod propres à Unix pour les chaînes mixtes, je ne vois pas comment la première approche abuse du typage.

+0

mais parfois il y a aussi un nombre après, comme "14_hello_world22 ", cela fonctionnerait-il alors? –

+0

@camran oui. Cela fonctionnera même alors. – Gordon

+0

Vous n'avez pas besoin d'utiliser substr(). Utilisez simplement la fonction strstr(). Il retourne tous les caractères de la première occurrence de l'aiguille (caractère dans ce cas) jusqu'à la fin de la chaîne – DPC

5
preg_match('/^(\d+)/', $yourString, $matches); 

$matches[1] tiendra votre valeur

+0

Êtes-vous sûr de '[1]'? Je dirais que ce serait «[0]' – Robin

+3

j'en suis sûr.'[0]' contiendra toute la chaîne correspondante, tandis que '[1]' aura la première valeur de groupe (parenthèse) – RaYell

1

plus simple qu'un regex:

$x = '14_hello_world'; 
$split = explode('_', $x); 
echo $split[0]; 

Sorties 14.

+0

Le résultat peut être vérifié pour la valeur numérique en utilisant is_numeric ($ split [0]), et vous devez définir limite à 2 en exploser, car vous n'avez pas besoin du reste, et vérifiez que $ split n'est pas un tableau vide. – Residuum

Questions connexes