Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung, wie PHP Strings in Ganzzahlen umwandelt, und Beispiele für Leistungstests

Detaillierte Erklärung, wie PHP Strings in Ganzzahlen umwandelt, und Beispiele für Leistungstests

伊谢尔伦
伊谢尔伦Original
2017-06-21 11:42:311560Durchsuche

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.

Beim Konvertieren eines Objekts gibt PHP den folgenden Hinweis aus:

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(&#39;4&#39;,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(&#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 />"; 
} 
?>
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&#39;;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&#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 />"; 
?>
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.0976209640503s
Es 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn