Hashtabelle in PHP

Wenn man vollständig Objektorientiert programmieren möchte, dann sind auch Arrays keine Ausnahme. Daher habe ich eine Hashtabelle für PHP entwickelt, die mit der Java-Klasse java.util.Hashtable ähnlich ist, jedoch abgespeckt ist.

<?php
class Hashtable
{
	private $_keys = array();

	private $_values = array();

	private $_pointer = 0;

	private $_workingPointer = 0;

	public function set($key, $value)
	{
		if ($this->get($key)) {
			$this->_values[$this->_workingPointer] = $value;
			return null;
		}
		$this->_keys[] = $key;
		$this->_values[] = $value;
		$this->_pointer++;
	}

	public function get($keys)
	{
		foreach ($this->_keys as $key1 => $value)
		{
			if ($value == $keys) {
				$key = $key1;
				break;
			}
		}

		if (!isset($key)) {
			return false;
		}
		$this->_workingPointer = $key;

		return $this->_values[$key];
	}
}

Funktionsweise

Diese Klasse verwaltet die Hashtabelle in zwei verschiedenen Arrays. Dabei wird in einem Array der Schlüssel und in einem anderen der Wert gespeichert. Verbunden werden diese Arrays über eine 1:1-Relation.

Anwendung

Die Verwendung dieser Klasse ist einfach und trotzdem sind komplizierte Konstrukte möglich. Im folgenden Beispiel wird eine Instanz mit Werten gefüllt und anschließend ausgelesen.

<?php
// Objekte erstellen
$hash = new Hashtable();
$objekt1 = new Object(); // Beliebiges Objekt

// Eintrag erstellen ($hash => $objekt1)
// $hash = Hashtabelle / $objekt1 = Objekt
$hash->set($hash, $objekt1);

...

// Eintrag auslesen
echo print_r($hash->get($hash), true);
// Hashtabelle analysieren
echo print_r($hash, true);
?>

Im oberen Beispiel wird eine Instanz der Hashtabelle erstellt und es wird ein Eintrag erstellt, dessen Schlüssel die Instanz der Hashtabelle selbst ist. Bei einen print_r der Hashtabelle wird eine Rekursion erkannt.

Das soll die Macht dieser Klasse erläutern.

1 Star2 Stars3 Stars4 Stars5 Stars (Wurde noch nicht bewertet)
Loading...


10 Kommentare zu “Hashtabelle in PHP”

  1. PeterJackson on Juni 1st, 2009 at 22:12

    Was macht man damit denn ?
    Versteh den Sinn gerade nicht so wirklich.
    Danke!

  2. Ich verstand den Sinn auch nicht und habe Fritz mal gefragt.

    Das kommt wohl aus der Java-Welt, wo man keine Objekte (Auch Strings sind da Objekte) als Schlüssel für Arrays verwenden darf. Es sind also nur Zahlen und (glaube ich) wenige andere Datentypen als Index erlaubt.

    Mit dieser Klasse wird es jedoch ermöglicht, auch Objekte als Index zu verwenden.

    In Java verstehe ich schon, warum man das benötigt.
    Aber in PHP würde mir dafür jetzt kein Anwendungsgebiet einfallen…

    Simon

  3. PeterJackson on Juni 2nd, 2009 at 21:54

    Ach dafür brauch man das:D

    Klingt schonmal recht simpel 😉

    Also einfach nur Um Objekte über „Index-Objekte“ im Array „anzusteuern“?

    Danke für deine Recherche!

  4. Hashtables in PHP machen keine Sinn, dank des assoziativen Array Supports.
    Das einzige was vielleicht fehlt ist eine vernünftige Methode um aus einem Objekt einen Hashkey zu berechnen.
    Sorry für die blöde Frage, aber was soll denn „$hash->get($hash)“ liefern? Eine rekursive Ausgabe des Hashtables?

    Man kann und sollte nie versuchen Java und PHP zu vermischen, dafür sind die Sprachen einfach zu unterschiedlich!

  5. @Marcus: $hash->get($hash) liefert die Variable $objekt1 zurück. Außerdem habe ich 2 Tage nachdem ich diesen Artikel geschrieben hatte eine Native Implementierung einer Hashtabelle gefunden, die ab PHP 5.1.0 verfügbar ist.

  6. Wo hast du die Implementierung gefunden?
    Ich finde bei Google nichts…

    Simon

  7. Irgendwo unter SPL im PHP-Manual.

    P.S.: Hier!

  8. Ah, ok…
    Gut zu wissen, auch wenn ich es bis jetzt noch nie gebraucht hätte.

    Simon

  9. Very cool!
    The enormous speed advantage of the getter is so cool!

  10. […] Es hat sich aber auch Positives getan. z.B. haben sich die Besucherzahlen stark gesteigert, dazu später aber noch mehr. Außerdem haben wir jetzt 2 neue Autoren, von denen einer leider nicht mehr aktiv ist (Ich spreche von Fritz). Schade eigentlich, denn seine Artikel waren ziemlich gut. Ein Beispiel: Hashtabelle in PHP […]

Hinterlasse einen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

»Informationen zum Artikel

Autor: Fritz
Datum: 30.05.2009
Zeit: 16:35 Uhr
Kategorien: Codeschnipsel
Gelesen: 8734x heute: 2x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Meta