Algorithmen und Datenstrukturen in PHP: Wo fängt ein Anfänger an?
Die Beherrschung von Algorithmen und Datenstrukturen ist ein entscheidender Schritt in der Entwicklung eines jeden Entwicklers, auch derjenigen, die PHP gewählt haben. Viele Anfänger glauben fälschlicherweise, dass für die Webentwicklung nur die Kenntnis der Syntax und von Frameworks ausreicht. Das Verständnis, wie man Daten effizient organisiert und verarbeitet, wirkt sich jedoch direkt auf die Leistung und Skalierbarkeit Ihrer Projekte aus. In diesem Artikel werden wir grundlegende Konzepte anhand praktischer PHP-Beispiele erläutern, die Ihnen helfen, den ersten Schritt in die Welt der effizienten Programmierung zu machen.
Warum sind Datenstrukturen in PHP wichtig?
PHP ist eine dynamisch typisierte Sprache, und sein eingebautes Array (array) ist tatsächlich ein Hybrid: Es kann sowohl als Liste als auch als Wörterbuch (Hash-Tabelle) fungieren. Das ist mächtig, aber ohne Verständnis der zugrundeliegenden Strukturen riskieren Sie, suboptimalen Code zu schreiben. Beispielsweise kann die Suche nach einem Element in einem unsortierten Array mit 10.000 Einträgen 100-mal länger dauern als die Suche in einer Hash-Tabelle.
Die wichtigsten Strukturen, die wir betrachten werden:
- Arrays — die Grundlage, aber mit Nuancen.
- Stapel und Warteschlange — für Aufgaben mit einer bestimmten Verarbeitungsreihenfolge.
- Verkettete Listen — für dynamische Speicherverwaltung.
- Hash-Tabellen — für schnellen Zugriff über einen Schlüssel.
1. Arrays und ihre Handhabung: Vom Einfachen zum Komplexen
In PHP ist ein Array eine geordnete Abbildung, die Schlüssel mit Werten verknüpft. Aber selbst mit dieser universellen Struktur kann man auf unterschiedliche Weise arbeiten.
Indizierte und assoziative Arrays
Ein indiziertes Array verwendet ganzzahlige Schlüssel, ein assoziatives Array verwendet Zeichenfolgen-Schlüssel. Beispiel:
<?php// Indiziertes Array$fruits = ["apple", "banana", "cherry"];echo $fruits[1]; // banana
// Assoziatives Array (Hash-Tabelle)$user = [ "name" => "Alice", "age" => 30, "city" => "Moscow"];echo $user["name"]; // Alice?>Operationen mit Arrays
Hinzufügen, Entfernen und Suchen sind grundlegende Operationen. Es ist wichtig, ihre zeitliche Komplexität zu kennen:
array_push()/$arr[] = $val— O(1) im Durchschnitt.array_pop()— O(1).array_shift()— O(n), da es alle Elemente neu indiziert.in_array()— O(n) für ein unsortiertes Array.isset($arr[$key])— O(1) für assoziative Arrays.
Beispiel für die effiziente Nutzung eines assoziativen Arrays zur Zählung der Worthäufigkeit:
<?php$text = "apple banana apple cherry banana apple";$words = explode(" ", $text);$freq = [];
foreach ($words as $word) { if (isset($freq[$word])) { $freq[$word]++; } else { $freq[$word] = 1; }}
print_r($freq);// Array ( [apple] => 3 [banana] => 2 [cherry] => 1 )?>2. Stapel und Warteschlange: LIFO- und FIFO-Prinzipien in PHP
Stapel (Last In, First Out) und Warteschlange (First In, First Out) sind klassische Strukturen, die sich in PHP leicht mit Arrays implementieren lassen.
Implementierung eines Stapels
Ein Stapel wird beispielsweise verwendet, um die Klammerpaarung zu überprüfen oder Aktionen rückgängig zu machen (undo).
<?phpclass Stack { private array $items = [];
public function push($item): void { $this->items[] = $item; // O(1) }
public function pop() { return array_pop($this->items); // O(1) }
public function peek() { return end($this->items); // O(1) }
public function isEmpty(): bool { return empty($this->items); }}
// Beispiel: Überprüfung auf ausgeglichene Klammernfunction isBalanced(string $expr): bool { $stack = new Stack(); $pairs = [')