Heim > Artikel > Backend-Entwicklung > Detaillierte Erklärung, wie PHP Strings in Ganzzahlen umwandelt, und Beispiele für Leistungstests
In PHP können wir drei Möglichkeiten verwenden, um String in eine Ganzzahl umzuwandeln.
1. Methode der erzwungenen Typkonvertierung Die Methode der erzwungenen Typkonvertierung ist die Methode, „den in Klammern eingeschlossenen Zieltyp vor der zu konvertierenden Variablen hinzuzufügen“.
<?php $foo = "1"; // $foo 是字符串类型 $bar = (int)$foo; // $bar 是整型 ?>Für Ganzzahltypen
Konvertierung erzwingen Typname ist int oder ganzzahlig. 2.
Eingebaute Funktion Methode Eingebaute Funktionsmethode besteht darin, die in PHP integrierte Funktion intval zum Konvertieren von Variablen zu verwenden.
<?php $foo = "1"; // $foo 是字符串类型 $bar = intval($foo); // $bar 是整型 ?>Das Format der intval-Funktion ist:
int intval(mixed $var [, int $base]);
Obwohl im PHP-Handbuch eindeutig angegeben ist, dass intval() nicht verwendet werden kann zur Array- und Objektkonvertierung. Nach meinen Tests wird es jedoch keine Probleme beim Konvertieren des Arrays geben. Der konvertierte Wert ist 1 und nicht wie erwartet 0. Ich fürchte, das liegt daran, dass Variablen vom Array-Typ in PHP auch davon ausgehen, dass sie Werte ungleich Null haben.
Objekt der Klasse xxxx konnte in xxxxx.php in Zeile xx nicht in int konvertiert werden
Der Konvertierungswert ist ebenfalls 1.
3.
Formatierungszeichenfolge Methode Die Formatierungszeichenfolgenmethode besteht darin, Sprintfs %d zu verwenden, um die angegebene Variable zu formatieren, um den Zweck der Typkonvertierung zu erreichen.
<?php $foo = "1"; // $foo 是字符串类型 $bar = sprintf("%d", $foo); // $bar 是字符串类型 ?>Genau genommen ist das Konvertierungsergebnis von sprintf immer noch vom Typ String und sollte daher nicht als eine Möglichkeit betrachtet werden, Zeichenfolgen in Ganzzahlen umzuwandeln. Aber der String-Wert ist nach seiner Verarbeitung tatsächlich zu „einer Ganzzahl geworden, die zwangsweise in einen String-Typ konvertiert werden muss“. Für normale Programmierer ist dies das Ende der Geschichte, aber für einige abnormale Programmierer sprechen wir über den folgenden Leistungstest: 1. Grundlegender Funktionstest
Legen Sie das folgende Array fest :
<?php $a[] = "1"; $a[] = "a1"; $a[] = "1a"; $a[] = "1a2"; $a[] = "0"; $a[] = array('4',2); $a[] = "2.3"; $a[] = "-1"; $a[] = new Directory(); ?>Verwenden Sie drei Methoden, um die Elemente im oben angegebenen Array der Reihe nach zu konvertieren und den Konvertierungsstatus zu überprüfen. Der Quellcode des Programms lautet wie folgt:
<?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 />"; } ?>Das endgültige Ausführungsergebnis des Programms ist wie folgt (der Hinweis, der beim Konvertieren eines Objekts angezeigt wird, wurde entfernt):
(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"It Daraus ist ersichtlich, dass die drei Konvertierungen Das Ergebnis ist genau das gleiche. Aus funktionaler Sicht sind also alle drei Methoden zur Konvertierung geeignet. Der nächste Schritt besteht also darin, herauszufinden, welche effizienter ist. 2. Leistungstest
<?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); } ?>Der Testprozess besteht darin, jede Methode zu verwenden, um die Variable $foo 1000000 Mal (1 Million Mal) umzuwandeln und den jeweiligen Zeitverbrauch insgesamt auszugeben aus drei Gruppen Test, um Fehler so weit wie möglich zu reduzieren. Das Testprogramm lautet wie folgt:
<?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 />"; ?>Das endgültige Testergebnis:
(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.0976209640503sEs ist ersichtlich, dass die Verwendung einer erzwungenen Typkonvertierung zum Konvertieren einer Zeichenfolge in eine Ganzzahl sinnvoll ist der schnellste von.
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie PHP Strings in Ganzzahlen umwandelt, und Beispiele für Leistungstests. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!