2011-09-14 3 views
2

disons que j'ai la chaîne suivante:Obtenir intval() en utilisant php?

danger13 afno 1 900004 

utilisant intval() il me donne 13, cependant, je veux saisir le plus grand entier dans la chaîne, qui est 9000004, comment puis-je y parvenir? Edit: la chaîne se présente sous différentes formes, et je ne sais pas où sera le nombre le plus élevé.

+3

Une façon qui vient à l'esprit est une chaîne divisée en tableau en utilisant 'exploser()', marcher à travers chaque membre, trouver le plus d'un –

+1

-ce que la chaîne a toujours le même format? Voulez-vous "le plus grand nombre" de la chaîne ou toujours * le dernier nombre * dans la chaîne? – deceze

+4

'intval ('danger13 afno 1 900004')' ne vous donne pas '13'. – salathe

Répondre

4

Vous aurez besoin d'obtenir tous les entiers de la chaîne, puis trouver le plus grand ...

$str = "danger13 afno 1 900004"; 
preg_match_all('/\d+/', $str, $matches); // get all the number-only patterns 
$numbers = $matches[0]; 

$numbers = array_map('intval', $numbers); // convert them to integers from string 

$max = max($numbers); // get the largest 

$max est maintenant 900004. Notez que ceci est très simple. Si votre chaîne contient quelque chose qui correspond au modèle \d+ (1 ou plusieurs chiffres) que vous ne souhaitez pas faire correspondre en tant qu'entier entier (par exemple 43.535 renverrait 535), cela ne vous satisfera pas. Vous devrez définir plus précisément ce que vous voulez dire.

0
<?php 

$string = 'danger13 afno 1 900004'; 

preg_match_all('/[\d]+/', $string, $matches); 

echo '<pre>'.print_r($matches,1).'</pre>'; 

$highest = array_shift($matches[0]); 

foreach($matches[0] as $v) { 
    if ($highest < $v) { 
    $highest = $v; 
    } 
} 

echo $highest; 

?> 
1
$nums=preg_split('/[^\d\.]+/',$string); //splits on non-numeric characters & allows for decimals 
echo max($nums); 

ETA: mise à jour pour permettre « mots » cette fin ou contenir des chiffres (Merci Gordon!)

+1

@Gordon: point pris. 'preg_split' et filtrer alphas avant max fonctionnerait mieux. – dnagirl

2

Pour la valeur la plus élevée entier lexicographique dans la chaîne (jusqu'à PHP_INT_MAX), vous pouvez juste diviser les chiffres à part et obtenir la valeur maximale:

$max = max(preg_split('/[^\d]+/', $str, NULL, PREG_SPLIT_NO_EMPTY)); 

Demo.

Ou mieux autodocumenté:

$digitsList = preg_split('/[^\d]+/', $str, NULL, PREG_SPLIT_NO_EMPTY); 
if (!$digitsList) 
{ 
    throw new RuntimeException(sprintf('Unexpected state; string "%s" has no digits.', $str)); 
} 
$max = max($digitsList); 
Questions connexes