Ein Typ für Listen und Dictionaries
PHP-Arrays sind geordnete Zuordnungen (Schlüssel => Wert). Als Liste haben sie Schlüssel 0, 1, 2 ..., als assoziatives Array beliebige Schlüssel (Strings oder Ints).
<?php
$liste = ["Apfel", "Birne", "Kirsche"];
$person = ["name" => "Mia", "alter" => 17, "hobbys" => ["Lesen", "Judo"]];
echo $liste[0], " ", $person["name"], " ", $person["hobbys"][1], " ", count($liste), "\n";
$liste[] = "Dattel"; // anhängen
$person["ort"] = "Berlin"; // hinzufügen
unset($liste[1]); // entfernen (Schlüssel bleiben!)
print_r($liste);
print_r(array_values($liste)); // neu durchnummerieren
var_dump(isset($person["ort"]), array_key_exists("alter", $person), in_array("Judo", $person["hobbys"]));Apfel Mia Judo 3
Array
(
[0] => Apfel
[2] => Kirsche
[3] => Dattel
)
Array
(
[0] => Apfel
[1] => Kirsche
[2] => Dattel
)
bool(true)
bool(true)
bool(true)Funktionen für Listen
<?php
$z = [5, 3, 9, 1];
array_push($z, 7); // am Ende
array_unshift($z, 0); // am Anfang
echo array_pop($z), array_shift($z), " ", implode(",", $z), "\n";
echo array_sum($z), " ", max($z), " ", min($z), " ", count($z), " ", array_product([2, 3]), "\n";
sort($z); echo implode(",", $z), "\n";
rsort($z); echo implode(",", $z), "\n";
echo implode(",", array_reverse($z)), " ", implode(",", array_slice($z, 1, 2)), "\n";
$z2 = [1, 2, 3, 4, 5];
array_splice($z2, 1, 2, ["x"]); // ersetzt 2 Elemente ab Index 1
echo implode(",", $z2), "\n";
echo implode(",", array_unique([1, 2, 2, 3, 1])), " ", implode(",", array_merge([1], [2, 3])), " ", implode(",", [...[1, 2], ...[3]]), "\n";
echo array_search(9, [5, 9, 1]), " ", implode(",", array_fill(0, 3, "x")), " ", implode(",", array_pad([1], 3, 0)), "\n";
print_r(array_chunk([1, 2, 3, 4, 5], 2));
print_r(array_combine(["a", "b"], [1, 2]));
print_r(array_count_values(["x", "y", "x"]));70 5,3,9,1
18 9 1 4 6
1,3,5,9
9,5,3,1
1,3,5,9 5,3
1,x,4,5
1,2,3 1,2,3 1,2,3
1 x,x,x 1,0,0
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 3
[1] => 4
)
[2] => Array
(
[0] => 5
)
)
Array
(
[a] => 1
[b] => 2
)
Array
(
[x] => 2
[y] => 1
)Funktionen für assoziative Arrays
<?php
$preise = ["Brot" => 2.5, "Milch" => 1.2, "Käse" => 4.0];
print_r(array_keys($preise));
print_r(array_values($preise));
asort($preise); print_r($preise); // nach Wert sortieren, Schlüssel behalten
ksort($preise); print_r($preise); // nach Schlüssel
arsort($preise); echo implode(",", array_keys($preise)), "\n";
print_r(array_flip(["a" => 1, "b" => 2]));
print_r(array_merge(["a" => 1, "b" => 2], ["b" => 3, "c" => 4]));
print_r(["a" => 1, "b" => 2] + ["b" => 9, "c" => 3]); // + behält links
foreach ($preise as $produkt => $preis) printf("%-6s %5.2f\n", $produkt, $preis);Array
(
[0] => Brot
[1] => Milch
[2] => Käse
)
Array
(
[0] => 2.5
[1] => 1.2
[2] => 4
)
Array
(
[Milch] => 1.2
[Brot] => 2.5
[Käse] => 4
)
Array
(
[Brot] => 2.5
[Käse] => 4
[Milch] => 1.2
)
Käse,Brot,Milch
Array
(
[1] => a
[2] => b
)
Array
(
[a] => 1
[b] => 3
[c] => 4
)
Array
(
[a] => 1
[b] => 2
[c] => 3
)
Käse 4.00
Brot 2.50
Milch 1.20map, filter, reduce
<?php
$z = [1, 2, 3, 4, 5, 6];
print_r(array_map(fn($x) => $x * $x, $z));
print_r(array_filter($z, fn($x) => $x % 2 === 0)); // behält Schlüssel
print_r(array_values(array_filter($z, fn($x) => $x > 4)));
echo array_reduce($z, fn($summe, $x) => $summe + $x, 0), "\n";
print_r(array_filter(["a" => 1, "b" => 5], fn($v, $k) => $v > 2 && $k !== "x", ARRAY_FILTER_USE_BOTH));
print_r(array_map(null, [1, 2], ["a", "b"])); // zip
usort($z, fn($a, $b) => $b <=> $a); // eigene Sortierung
echo implode(",", $z), "\n";
$personen = [["n" => "Tom", "a" => 30], ["n" => "Mia", "a" => 17], ["n" => "Zoe", "a" => 17]];
usort($personen, fn($a, $b) => [$a["a"], $a["n"]] <=> [$b["a"], $b["n"]]);
echo implode(",", array_column($personen, "n")), "\n";
print_r(array_column($personen, "a", "n"));Array
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
[5] => 36
)
Array
(
[1] => 2
[3] => 4
[5] => 6
)
Array
(
[0] => 5
[1] => 6
)
21
Array
(
[b] => 5
)
Array
(
[0] => Array
(
[0] => 1
[1] => a
)
[1] => Array
(
[0] => 2
[1] => b
)
)
6,5,4,3,2,1
Mia,Zoe,Tom
Array
(
[Mia] => 17
[Zoe] => 17
[Tom] => 30
)Mehrdimensionale Arrays und Destrukturierung
<?php
$matrix = [[1, 2, 3], [4, 5, 6]];
echo $matrix[1][2], "\n";
foreach ($matrix as $zeile) echo implode(" ", $zeile), "\n";
$kunden = [
["name" => "Mia", "punkte" => 120],
["name" => "Tom", "punkte" => 80],
];
foreach ($kunden as ["name" => $n, "punkte" => $p]) echo "$n: $p\n";
echo json_encode(array_map(null, ...$matrix)), "\n"; // transponieren6 1 2 3 4 5 6 Mia: 120 Tom: 80 [[1,4],[2,5],[3,6]]
Merke
- Arrays sind geordnete Schlüssel/Wert-Zuordnungen für Listen und Dictionaries
[]anhängen,unsetentfernt,isset/array_key_existsprüfensort,asort,ksort,usortsortieren; Zusatzr= absteigendarray_map,array_filter,array_reducemit Pfeilfunktionenfn...entpackt Arrays,[$a, $b] = ...destrukturiert- Arrays werden bei Zuweisung kopiert (Copy-on-Write)
Aufgabe
Gruppiere eine Liste von Wörtern nach Anfangsbuchstaben in ein assoziatives Array und gib die Gruppen sortiert aus.