2009-05-05 4 views
2

J'ai une variable qui est définie par un appel POST à ​​partir d'un formulaire où il est entré dans un champ de texte. Y at-il un moyen de convertir cette variable en un interger?Comment changer une variable de texte à un int en PHP?

De la forme:

Lenght: <input name="length" value="10" type="text" id="lenght" size="2" /> 

à partir du code php:

$length = $_POST['lenght']; 
$url = substr($url, 0, $length); 

Cela ne semble pas fonctionner et la seule raison pour laquelle je pense qu'il ne fonctionne pas est parce que $ longueur est défini comme du texte et non comme un interger.

+0

$ _POST ['longueur']; est-ce un accident? – TStamper

+0

Je sais que j'ai mal orthographié la longueur. J'utilisais IE6 sans le vérificateur d'orthographe intégré. Je ne sais pas comment j'ai jamais survécu ... – JoshFinnie

+0

Un correcteur orthographique ne vous aidera pas dans un IDE tout en travaillant avec des variables, cependant. Si vous définissez une variable avec le nom "longueur", puis essayez de le référencer plus tard comme "longueur", vous obtiendrez des résultats défavorables. – Travis

Répondre

15

Deux choses:

  1. Il ne fonctionne pas parce que vous longueur < mal orthographié -> Longueur

  2. La bonne façon de convertir une chaîne en un entier utilise la fonction intval.


$length = intval($_POST['length']); 
$url = substr($url, 0, $length); 
2

Semble être une faute d'orthographe dans votre code: longueur par rapport à longueur - ce pourrait être votre problème là.

Pour faire une conversion explicite, utilisez la fonction intval()

$length = intval($_POST['length']); 
10

Il ne fonctionnera probablement pas parce que vous deux fois la longueur mal orthographié, au lieu de zéro ou trois fois.

+2

J'ai ri - vu plein de code comme ça. Tant que vous l'épelez à chaque fois qu'il n'y a pas de problème, n'est-ce pas? –

+1

En fait, je compte trois de chaque orthographe, sans compter le texte de la question. –

+0

Explication cool :-) –

0

Si vous êtes sûr que la valeur que vous êtes à la recherche a une représentation correcte pour le type que vous voulez convertir, vous pouvez également utiliser une opération de coulée de type vanille:

$int = (int) "1"; // var_dump($int) => int(1) 
$float = (float) "1.2345"; // var_dump($float) => float(1.2345) 

Méfiez-vous des représentations incorrectes de la variable que vous convertissez, c'est-à-dire que l'envoi d'une "chaîne aléatoire" à un nombre peut ne pas donner les résultats attendus. Si vous gérez l'entrée d'utilisateur, vous êtes mieux d'utiliser les solutions proposées ci-dessus avec des appels de fonctions telles que INTVAL et floatval

1

Ignorant les fautes d'orthographe de « longueur » ci-dessus, il y a quelques façons de convertir explicitement une chaîne dans un entier en PHP. Habituellement, cette conversion se fera automatiquement. Prenez le code suivant:

$numeric_string = '42'; 
echo ($numeric_string * 2); 

Ceci affichera "84" comme prévu. Voir la référence au Type-Juggling.

Si vous savez que la chaîne que vous avez est un nombre (peut-être en vérifiant is_numeric()) alors vous pouvez cast the variable to an Integer

$numeric_string = '42'; 
$converted_integer = (int) $numeric_string; 
// or 
$converted_integer = (integer) $numeric_string; 

ou utiliser intval()

$numeric_string = '42'; 
$converted_integer = intval($numeric_string); 

Un point important à retenir à propos intval() est qu'il retournera un 0 s'il ne peut pas résoudre la chaîne en entier. Cela pourrait (potentiellement) vous donner un deuxième moyen de vérifier les erreurs (après is_numeric()), ou cela pourrait entraîner des résultats inattendus si vous n'assurez pas correctement que la variable est numérique pour commencer.

Questions connexes