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 $arr = array("januar" => 1, "februar" => 2, 'märz' => 3, 'april' => 4); var_dump($arr["januar"]); var_dump($arr['februar']); ?>
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 error_reporting(E_ALL); $arr = array("januar" => 1, "februar" => 2, 'märz' => 3, 'april' => 4); var_dump($arr[januar]); var_dump($arr[februar]); ?>
<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 $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 ?>
(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 $arr = array(1=>1, '1'=>2); var_dump($arr); ?>
array(1) { [1]=> int(2) }
[/syntaxhighlight]