En PHP, nous pouvons utiliser 3 façons de convertir une chaîne en entier.
1. Méthode de conversion de type forcée
La méthode de conversion de type forcée est la méthode "d'ajout du type cible entre parenthèses avant la variable à convertir".
<?php $foo = "1"; // $foo 是字符串类型 $bar = (int)$foo; // $bar 是整型 ?>
Pour le type entier, forcer la conversion le nom du type est entier ou entier.
2.Méthode de fonction intégrée
La méthode de fonction intégrée consiste à utiliser la fonction intégrée de PHP intval pour convertir les variables.
<?php $foo = "1"; // $foo 是字符串类型 $bar = intval($foo); // $bar 是整型 ?>
Le format de la fonction intval est :
int intval(mixed $var [, int $base]);
Bien que le manuel PHP indique clairement que intval() ne peut pas être utilisé pour la conversion de tableaux et d'objets. Mais après mes tests, il n'y aura aucun problème lors de la conversion du tableau. La valeur convertie est 1 et non 0 comme prévu. J'ai bien peur que ce soit parce qu'en PHP, les variables de type tableau sont également considérées comme ayant des valeurs non nulles.
Lors de la conversion d'un objet, PHP donnera l'avis suivant :
L'objet de classe xxxx n'a pas pu être converti en int dans xxxxx.php à la ligne xx
La valeur de conversion est également 1.
3.Méthode de formatage de la chaîne
La méthode de formatage de la chaîne consiste à utiliser le %d de sprintf pour formater la variable spécifiée afin d'atteindre l'objectif de conversion de type.
<?php $foo = "1"; // $foo 是字符串类型 $bar = sprintf("%d", $foo); // $bar 是字符串类型 ?>
À proprement parler, le résultat de la conversion de sprintf est toujours de type chaîne, il ne doit donc pas être considéré comme un moyen de convertir une chaîne en entier. Mais la valeur de chaîne après son traitement est en effet devenue "un entier qui est forcé d'être converti en type chaîne".
Pour les programmeurs ordinaires, c'est la fin de l'histoire, mais pour certains programmeurs anormaux, parlons du test de performances suivant :
1 Test fonctionnel de base
Définissez le tableau suivant. :
<?php $a[] = "1"; $a[] = "a1"; $a[] = "1a"; $a[] = "1a2"; $a[] = "0"; $a[] = array('4',2); $a[] = "2.3"; $a[] = "-1"; $a[] = new Directory(); ?>
Utilisez trois méthodes pour convertir les éléments du tableau ci-dessus dans l'ordre et vérifiez l'état de la conversion. Le code source du programme est le suivant :
<?php $a[] = "1"; $a[] = "a1"; $a[] = "1a"; $a[] = "1a2"; $a[] = "0"; $a[] = array('4',2); $a[] = "2.3"; $a[] = "-1"; $a[] = new Directory(); // int print "(int)<br />"; foreach($a as $v) { var_dump((int)$v); print "<br />"; } // intval print "intval();<br />"; foreach($a as $v) { var_dump(intval($v)); print "<br />"; } // sprintf print "sprintf();<br />"; foreach($a as $v) { var_dump(sprintf("%d", $v)); print "<br />"; } ?>
Le résultat final de l'exécution du programme est le suivant (l'avis qui apparaît lors de la conversion de l'objet a été supprimé) :
(int) int(1) int(0) int(1) int(1) int(0) int(1) int(2) int(-1) int(1) intval(); int(1) int(0) int(1) int(1) int(0) int(1) int(2) int(-1) int(1) sprintf(); string(1) "1" string(1) "0" string(1) "1" string(1) "1" string(1) "0" string(1) "1" string(1) "2" string(2) "-1" string(1) "1"
Il On peut voir à partir de là que les trois conversions Le résultat est exactement le même. Donc, fonctionnellement parlant, les trois méthodes sont capables d'effectuer un travail de conversion, la prochaine étape consiste donc à voir laquelle est la plus efficace.
2. Test de performances
<?php $foo = "1';Select * ..."; ?> 获取时间点的函数如下(用于获取测试起始点和结束点,以计算消耗时间): <?php ** * Simple function to replicate PHP 5 behaviour */ function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } ?>
Le processus de test consiste à utiliser chaque méthode pour convertir la variable $foo 1 000 000 fois (1 million de fois) et générer la consommation de temps respective, un total de trois groupes Test pour réduire autant que possible les erreurs. Le programme de test est le suivant :
<?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $foo = "1';Select * ..."; // (int) $fStart = microtime_float(); for($i=0;$i<1000000;$i++) { $bar = (int)$foo; } $fEnd = microtime_float(); print "(int):" . ($fEnd - $fStart) . "s<br />"; // intval() $fStart = microtime_float(); for($i=0;$i<1000000;$i++) { $bar = intval($foo); } $fEnd = microtime_float(); print "intval():" . ($fEnd - $fStart) . "s<br />"; // sprintf() $fStart = microtime_float(); for($i=0;$i<1000000;$i++) { $bar = sprintf("%d", $foo); } $fEnd = microtime_float(); print "sprintf():" . ($fEnd - $fStart) . "s<br />"; ?>
Le résultat final du test :
(int):0.67205619812012s intval():1.1603000164032s sprintf():2.1068270206451s (int):0.66051411628723s intval():1.1493890285492s sprintf():2.1008238792419s (int):0.66878795623779s intval():1.1613430976868s sprintf():2.0976209640503s
On peut voir qu'utiliser la conversion de type forcée pour convertir une chaîne en entier est le plus rapide de.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!