Explication détaillée de la façon dont PHP convertit les chaînes en entiers et exemples de tests de performances

伊谢尔伦
Libérer: 2023-03-10 22:26:01
original
1508 Les gens l'ont consulté

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 是整型 
?>
Copier après la connexion

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 是整型 
?>
Copier après la connexion

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 是字符串类型 
?>
Copier après la connexion

À 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(&#39;4&#39;,2); 
$a[] = "2.3"; 
$a[] = "-1"; 
$a[] = new Directory(); 
?>
Copier après la connexion

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(&#39;4&#39;,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 />"; 
} 
?>
Copier après la connexion

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"
Copier après la connexion

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&#39;;Select * ..."; 
?> 
  获取时间点的函数如下(用于获取测试起始点和结束点,以计算消耗时间): 
<?php 
** 
* Simple function to replicate PHP 5 behaviour 
*/ 
function microtime_float() 
{ 
list($usec, $sec) = explode(" ", microtime()); 
return ((float)$usec + (float)$sec); 
} 
?>
Copier après la connexion

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&#39;;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 />"; 
?>
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!