1. Einleitung
Der Zugriff auf Array-Elemente über geschweifte Klammern (so wie in Perl) ist auch in PHP möglich. Dazu müssen nur die sonst üblichen eckigen Klammern durch geschweifte ersetzt werden. Entsprechend lautet die Syntax $element = $array{schlüssel}, wobei „schlüssel” ein möglicher Schlüssel im Array sein muss. Das kann entweder ein Integer oder ein String sein (Strings müssen in einfachen oder doppelten Anführungszeichen stehen), oder eine Variable, die wiederum einen String/Integer enthält. (Einige andere Datentypen sind auch möglich, werden aber letztlich in String/Integer konvertiert.) Die nachfolgenden Beispiele demonstrieren die Anwendung und weisen nach, dass die Syntax in PHP — zumindest derzeit — noch funktioniert.
Hinweis: Der Zugriff über geschweifte Klammern ist unüblich. Es sollten möglichst nur eckige Klammern verwendet werden.
2. Lesender Zugriff bei Integer-Schlüsseln
Der Zugriff auf Integer-Schlüssel eines Arrays über geschweifte Klammer ist identisch zum Zugriff über eckige Klammern — offensichtlich abgesehen davon, dass geschweifte statt eckige Klammern verwendet werden. Das nächste Beispiel demonstriert dies, indem ein Array mit drei Elementen erzeugt wird, auf welche wiederum lesend zugegriffen wird. (Die drei Elemente erhalten automatisch von PHP die Schlüssel 0, 1 und 2, da ihre Schlüssel nicht explizit angegeben wurden.)
<?php $arr = array('a', 'b', 'c'); var_dump( $arr{0}, $arr{1}, $arr{2} ); ?>
string(1) "a" string(1) "b" string(1) "c"
3. Lesender Zugriff bei String-Schlüsseln
In diesem Beispiel wird auf drei Elemente eines Arrays zugegriffen, welche Strings als Schlüssel haben. Auch hier bleibt im Wesentlichen alles gegenüber eckigen Klammern gleich.
<?php $arr = array('I' => 'a', 'II' => 'b', 'III' => 'c'); var_dump( $arr{'I'}, $arr{'II'}, $arr{'III'} ); ?>
string(1) "a" string(1) "b" string(1) "c"
4. Lesender Zugriff bei mehrdimensionalem Array
Auch bei mehrdimensionalen Arrays kann auf Elemente von Unterarrays zugegriffen werden, indem mehrere Schlüssel in geschweiften Klammern kombiniert werden.
<?php $arr = array( 'a' => array('I' => 'aI', 'II' => 'aII'), 'b' => array('I' => 'bI', 'II' => 'bII') ); var_dump( $arr{'a'}{'I'}, $arr{'a'}{'II'}, $arr{'b'}{'I'}, $arr{'b'}{'II'} ); ?>
string(2) "aI" string(3) "aII" string(2) "bI" string(3) "bII"
5. Schreiben bei Integer-Schlüsseln
Genauso wie der lesende Zugriff ist auch der schreibende Zugriff auf Integer-Schlüssel über geschweifte Klammern erlaubt.
<?php $arr = array(); $arr{0} = 'a'; $arr{1} = 'b'; $arr{2} = 'c'; var_dump($arr); ?>
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }
6. Schreibender Zugriff auf String-Schlüssel
Ebenfalls funktioniert der schreibende Zugriff auf Elemente mit Strings als Schlüsseln problemlos.
<?php $arr = array(); $arr{'I'} = 'a'; $arr{'II'} = 'b'; $arr{'III'} = 'c'; var_dump($arr); ?>
array(3) { ["I"]=> string(1) "a" ["II"]=> string(1) "b" ["III"]=> string(1) "c" }
7. Schreibender Zugriff bei mehrdimensionalen Arrays
Analog zum lesenden Zugriff bei mehrdimensionalen Arrays wird der schreibende über geschweifte Klammern durchgeführt:
<?php $arr = array(); $arr{'a'}{'I'} = 'aI'; $arr{'a'}{'II'} = 'aII'; $arr{'b'}{'I'} = 'bI'; $arr{'b'}{'II'} = 'bII'; var_dump($arr); ?>
array(2) { ["a"]=> array(2) { ["I"]=> string(2) "aI" ["II"]=> string(3) "aII" } ["b"]=> array(2) { ["I"]=> string(2) "bI" ["II"]=> string(3) "bII" } }
8. Zugriff auf Strings
In früheren PHP-Versionen war es üblich, auf einzelne Zeichen in einem String per geschweifter Klammern zuzugreifen. So wurde signalisiert, dass auf ein Zeichen und nicht auf ein Array-Element zugegriffen wurde. Inzwischen gilt diese Schreibweise als veraltet (deprecated) und sollte nicht mehr verwendet werden. Stattdessen ist es vorgesehen, dass nun auch bei Strings eckige Klammern Anwendung finden. Nichtsdestotrotz funktioniert die Syntax noch, wie das nachfolgende Beispiel zeigt.
<?php $str = 'abc'; // String diesmal - kein Array! var_dump($str{0}, $str{1}, $str{2}); var_dump($str[0], $str[1], $str[2]); ?>
string(1) "a" string(1) "b" string(1) "c" string(1) "a" string(1) "b" string(1) "c"