String in Integer umwandeln (Thema: PHP Beispiele)

Wie Strings in Integer konvertiert werden können und was dabei zu beachten ist

1. intval() und (int)

Die Konvertierung von String nach Integer ist vergleichsweise einfach. Der direkteste Weg ist es, auf den String die Funktion intval() oder den typecast (int) anzuwenden. Beide sind vom Ergebnis her identisch. Das nachfolgende Beispiel zeigt die Verwendung von intval() bei verschiedenen möglichen String-Eingaben:

PHP-Code
<?php
	$strs = array('1', '0', '1000', '12a', '12a', '1.5', 'derp', '-1', '+1', '100', '2e5', 'true');
	
	foreach ($strs as $val) {
		echo "$val: " . intval($val) . "\n";
	}
?>

HTML-Code: Ausgabe
1: 1
0: 0
1000: 1000
12a: 12
12a: 12
1.5: 1
derp: 0
-1: -1
+1: 1
100: 100
2e5: 2
true: 0


Wie im Beispiel zu sehen ist, liest PHP beim Konvertieren von String zu Integer so viele Ziffern (0-9) aus wie es finden kann — sprich, bis das erste Zeichen im String gefunden wird, das keine Ziffer ist. Daher wird etwa „12a” zu 12 und „1.5” zu 1 umgewandelt. Ebenfalls kann man feststellen, dass Strings ohne irgendwelche Ziffern am Anfang immer zu 0 konvertiert werden. Zudem erkennt die Funktion bereits Vorzeichen, aber nicht die Exponentenschreibweise („2e5”).

Nachfolgend wird noch der Typecast zu Integer über (int)$var gezeigt, welcher aber genau die selben Ergebnisse liefert:

PHP-Code
<?php
	$strs = array('1', '0', '1000', '12a', '12a', '1.5', 'derp', '-1', '+1', '100', '2e5', 'true');
	
	foreach ($strs as $val) {
		echo "$val: " . (int)$val . "\n";
	}
?>

HTML-Code: Ausgabe
1: 1
0: 0
1000: 1000
12a: 12
12a: 12
1.5: 1
derp: 0
-1: -1
+1: 1
100: 100
2e5: 2
true: 0


2. Eigene Funktion

Im nächsten Beispiel wird eine eigene Funktion definiert, die sich zur Umwandlung von String zu Integer eignet. Diese Funktion prüft zunächst, ob es sich beim übergebenen String auch um einen gültigen Integer handelt. Ein solcher gültiger Integer beginnt optional mit einem Vorzeichen und besteht dann aus beliebig vielen Ziffern (0-9). Falls es sich um die Exponentenschreibweise handelt, folgt dann ein "e" oder "E", wiederum gefolgt von beliebig vielen Ziffern (0-9). Handelt es sich bei dem String nicht um einen gültigen Integer, dann wird eine Fehlermeldung geworfen.

Andernfalls wird der String am e bzw. E getrennt, sodass er aus maximal zwei Teilen (dem davor und dem danach) besteht (in der Regel aber nur aus einem). Falls kein zweiter Teil beim Aufsplitten entstanden ist (keine Exponentenschreibweise) dann wird der Integerwert des ersten Teils mit intval() bestimmt und zurückgegeben. Andernfalls werden zunächst die Integerwerte des ersten Teils A und des zweiten Teils B (A=vor e/E, B=nach e/E) ermittelt. Zurückgegeben wird dann A*10B.

PHP-Code
<?php
	function strToInt($str) {
		// sicherstellen, dass ein String uebergeben wurde und Leerzeichen am Anfang/Ende entfernen
		$str = trim(strval($str));
		
		// Pruefe, ob der String einen gueltigen Aufbau hat:
		// Erst Vorzeichen (optional), dann Ziffern 0-9, dann optional e oder E mit folgenden Ziffern 0-9 (bei Exponentenschreibweise)
		if (!preg_match('/^(\+|\-)?[0-9]+((e|E)[0-9]+)?$/', $str)) {
			throw new Exception('Ungültiges Format, Konvertierung zu Integer nicht möglich.');
		}
		
		// String bei e/E teilen (falls Exponentenschreibweise)
		$arr = preg_split('/[eE]/', $str);
		
		// Teil vor e/E in Integer umwandeln
		$pre = intval($arr[0]);
		
		// Teil nach e/E (falls vorhanden) in Integer umwandeln
		$post = (isset($arr[1]) ? intval($arr[1]) : null);
		
		if ($post===null) {
			// keine Exponentenschreibweise, nur Teil vor e/E wird benoetigt
			return $pre;
		} else {
			// Exponentenschreibweise, entsprechend (Teil vor e/E) * (10 hoch (Teil nach e/E)) rechnen
			return $pre*pow(10, $post);
		}
	}
	
	$strs = array('1', '0', '1000', '12a', '12a', '1.5', 'derp', '-1', '+1', '100', '2e5', 'true');
	foreach ($strs as $val) {
		try {
			echo "$val: " . strToInt($val) . "\n";
		} catch (Exception $e) {
			echo "$val: " . $e->getMessage() . "\n";
		}
	}
?>

HTML-Code: Ausgabe
1: 1
0: 0
1000: 1000
12a: Ungültiges Format, Konvertierung zu Integer nicht möglich.
12a: Ungültiges Format, Konvertierung zu Integer nicht möglich.
1.5: Ungültiges Format, Konvertierung zu Integer nicht möglich.
derp: Ungültiges Format, Konvertierung zu Integer nicht möglich.
-1: -1
+1: 1
100: 100
2e5: 200000
true: Ungültiges Format, Konvertierung zu Integer nicht möglich.


Kommentare (0)

Von neu nach alt