Arrays
Grundlagen
- Dynamisch, keine Deklaration erforderlich
- wahlweise assoziativ oder indiziert
- Können über
array()-Funktion oder Literal[ ]angelegt werden - indiziert
$a = [ 'A', 'B', 'C' ]; - assoziativ
$a = [ 'k1' => 1, 'k2' => 2 ]; - Elemente werden an das Ende angehängt
$a[] = 17; - Zugriff auf Array-Element über
- Schlüssel:
$a["key"] - Index (0..count-1):
$array[0]
Beispiel: Arrays (indiziert)
// Erzeugen eines indizierten Arrays
$a[] = 1;
$a[] = 2;
$a[] = 3;
echo $a[1]; // -> 2
echo count($a); // -> 3
$a[1] = "ersetzt";
echo $a[1]; // -> ersetzt
// iterieren über Array (klassisch)
for ($i=0; $i < count($a); $i++) {
echo ($a[$i]);
}
// Erzeugen eines indizierten Arrays
// per Literal und array-Funktion
$a = [ 1, 2, 3 ];
$b = array(3, 4, 5);
// iterieren über Array (klassisch)
for ($i=0; $i < count($a); $i++) {
echo ($a[$i]);
}
Beispiel: Arrays (assoziativ)
// assoziatives Array
$b["gehen"] = "go";
$b["schlafen"] = "sleep";
echo $b["gehen"]; // -> go
// assoziatives Array
$c = array('gehen' => 'go', 'schlafen' => 'sleep');
echo $c["gehen"]; // -> go
// iterieren über assoziatives Array
foreach ($c as $key => $value) {
echo $key, "->", $value;
}
Zugriff auf nicht existentes Element
Zugriff auf ein nicht existentes Element führt zu einer Warnung und ergibt null
- kann durch
??unterdrückt werden - kann vorher durch
array_key_existsgetestet werden
$a = [];
$a['key'] = 42;
echo $a['doesnotexist'] ?? "<undefined>";
echo array_key_exists('doesnotexist', $a) ? $a['doesnotexist'] : "<undefined>";
foreach-Schleife für Arrays
Durchläuft elementweise das Array
- Elemente dürfen von beliebigem Typ sein
- funktioniert für indizierte und assoziative Arrays
- Syntax:
foreach ($array as $element) { ... }
$a = array("A", "B", "C", "D", "E");
foreach ($a as $element) {
echo $element, " ";
}
Ausgabe: A B C D E
foreach-Schleife mit Key für Arrays
Durchläuft elementweise das Array
- Elemente dürfen von beliebigem Typ sein
- bei indizierten Array enthält
$keyden Index - bei assoziativen enthält
$keyden Schlüssel - Syntax:
foreach ($array as $key => $value) { ... }
$a = array("A", "B", "C", "D", "E");
foreach ($a as $key => $element) {
echo $key, ": ", $element, ", ";
}
Ausgabe: 0: A, 1: B, 2: C, 3: D, 4: E
Arrays sind keine Objekte
PHP-Arrays sind keine Objekte mit Referenzen (↔ Java, JavaScript oder Ruby)
- die Variable repräsentiert das Array, keine Referenz
- eine Zuweisung kopiert das Array
- Arrays werden an Funktionen per Kopie übergeben
$a = [ 1, 2, 3 ];
$b = $a; // Array wird KOPIERT
$b[0] = 42;
print_r($b); // -> [42, 2, 3]
print_r($a); // -> [ 1, 2, 3]
function array_changer($arry) {
$arry[0] = 42;
}
$a = [1, 2, 3];
array_changer($a);
print_r($a); // -> [1, 2, 3]
Will man das Verhalten anderer Programmiersprachen, muss man eine Referenz & benutzen
$a = [ 1, 2, 3 ];
$b = &$a; // $b ist eine Referenz auf $a
$b[0] = 42;
print_r($b); // -> [42, 2, 3]
print_r($a); // -> [42, 2, 3]
function array_changer(&$arry) {
$arry[0] = 42;
}
Wichtige Funktionen
| Funktion | Beschreibung |
|---|---|
array_diff() | Compare arrays, and returns the differences (compare values only) |
array_fill() | Fills an array with values |
array_filter() | Filters the values of an array using a callback function |
array_flip() | Flips/Exchanges all keys with their associated values in an array |
array_intersect() | Compare arrays, and returns the matches (compare values only) |
array_key_exists() | Checks if the specified key exists in the array |
array_keys() | Returns all the keys of an array |
array_map() | Sends each value of an array to a user-made function, which returns new values |
array_merge() | Merges one or more arrays into one array |
array_pop() | Deletes the last element of an array |
array_push() | Inserts one or more elements to the end of an array |
| Funktion | Beschreibung |
|---|---|
array_rand() | Returns one or more random keys from an array |
array_reduce() | Returns an array as a string, using a user-defined function |
array_reverse() | Returns an array in the reverse order |
array_search() | Searches an array for a given value and returns the key |
array_shift() | Removes the first element from an array, and returns the value of the removed element |
array_slice() | Returns selected parts of an array |
array_splice() | Removes and replaces specified elements of an array |
array_values() | Returns all the values of an array |
array_walk() | Applies a user function to every member of an array |
| Funktion | Beschreibung |
|---|---|
asort() | Sorts an associative array in ascending order, according to the value |
compact() | Create array containing variables and their values |
extract() | Imports variables into the current symbol table from an array |
count() | Returns the number of elements in an array |
sizeof() | Alias of count() |
in_array() | Checks if a specified value exists in an array |
key() | Fetches a key from an array |
range() | Creates an array containing a range of elements |
shuffle() | Shuffles an array |
sort() | Sorts an indexed array in ascending order |
Fallstrick bei PHP-Arrays
Arrays sind gleichzeitig assoziativ und indiziert
$a[0] = "a";
$a[1] = "b";
$a["0"] = "c";
$a["2"] = "d";
$a["x"] = "e";
print("Länge: " . count($a) . "\n");
print_r($a);
Länge: 4
[0] => c, [1] => b, [2] => d, [x] => e
Man sollte darauf achten, ein Array immer nur entweder indiziert oder assoziativ zu nutzen