Strings als Array-Schlüssel verwenden (Thema: PHP Beispiele)

Möglichkeiten der Verwendung von Strings als Schlüssel für PHP-Arrays

URL: http://www.rither.de/a/informatik/php-beispiele/arrays/strings-als-array-schluessel-verwenden/

1. Definition von und Zugriff auf String-Schlüssel

Werte mit String-Schlüsseln werden typischerweise über eine der folgenden Arten definiert:

  • $array = array('STRING' => wert); (einfache Anführungszeichen)
  • $array = array("STRING" => wert); (doppelte Anführungszeichen)
  • $array['STRING'] = wert; (einfache Anführungszeichen)
  • $array["STRING"] = wert; (doppelte Anführungszeichen)

Die Definition über einfache Anführungszeichen ist üblicher, da die Schlüssel nicht von Variablen abhängig sein sollten und daher das Variablenparsing von doppelten Anführungszeichen nicht benötigt wird. String-Schlüssel können beliebige Zeichen enthalten.

Der Zugriff erfolgt analog über $arr['STRING'] oder $arr["STRING"].

PHP-Code
<?php
	$arr = array("januar" => 1, "februar" => 2, 'märz' => 3, 'april' => 4);
	var_dump($arr["januar"]);
	var_dump($arr['februar']);
?>

HTML-Code
int(1)
int(2)


Vereinzelt kommt es vor, dass Entwickler weder doppelte noch einfache Anführungszeichen beim Zugriff auf String-Schlüssel verwenden. Das funktioniert, da PHP in diesen Fällen zunächst annimmt, dass man eine entsprechende Konstante meint, anschließend aber bemerkt, dass diese nicht existiert und dann den Namen in einen String umwandelt. Entsprechend würde man sofort unerwartete Ergebnisse erhalten, wenn eine gleichnamige Konstante doch existieren sollte. PHP erzeugt daher Fehlermeldungen bei der Ausführung, obwohl der Code prinzipiell funktioniert. Es sollten immer einfache oder zumindest doppelte Anführungszeichen verwendet werden.

PHP-Code
<?php
	error_reporting(E_ALL);
	$arr = array("januar" => 1, "februar" => 2, 'märz' => 3, 'april' => 4);
	var_dump($arr[januar]);
	var_dump($arr[februar]);
?>

HTML-Code
<br />
<b>Notice</b>:  Use of undefined constant januar - assumed 'januar' in <b>...\test.php</b> on line <b>4</b><br />
int(1)
<br />
<b>Notice</b>:  Use of undefined constant februar - assumed 'februar' in <b>...\test.php</b> on line <b>5</b><br />
int(2)


2. String-Schlüssel aus Ziffern

Verwendet man als String-Schlüssel nur Ziffern von 0 bis 9, dann wandelt PHP diesen Schlüsseln automatisch von String zu Integer um. Wie das nachfolgende Beispiel zeigt, sollten die meisten Aktionen im Zusammenhang mit solchen Schlüsseln dadurch unbeeinflusst bleiben. In Ausnahmefällen kann es aber eventuell zu Problemen führen, die nur sehr schwer zu identifizieren sind, daher sollte man dieses Verhalten im Hinterkopf behalten.

PHP-Code
<?php
	$arr = array('1' => 1, '2' => 2, '3' => 3);
	
	foreach ($arr as $key=>$val) {
		echo("(".gettype($key).")$key: (".gettype($val).")$val\n");
	}
	
	var_dump($arr['1']); // 1
	var_dump($arr[1]); // 1
	
	var_dump(array_key_exists('1', $arr)); // true
	var_dump(array_key_exists(1, $arr)); // true
	
	var_dump(isset($arr['1'])); // true
	var_dump(isset($arr[1])); // true
?>

HTML-Code
(integer)1: (integer)1
(integer)2: (integer)2
(integer)3: (integer)3
int(1)
int(1)
bool(true)
bool(true)
bool(true)
bool(true)


Im nächsten Beispiel dazu wird dem Integer-Schlüssel (int)1 und dem String-Schlüssel (string)"1" jeweils ein Wert zugeordnet — übrig bleibt am Ende aber nur die zweite Zuordnung:

PHP-Code
<?php
	$arr = array(1=>1, '1'=>2);
	var_dump($arr);
?>

array(1) { [1]=> int(2) }

[/syntaxhighlight]

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK