User Tools

Site Tools


php:kompost:simplehashtable

[PHP] Einfache Hashtable

So auf die Schnelle eine Hashtable nachgebildet

Zuerst eine abstrakte Hashtable, die so wiederverwendbar ist

HashTable.php
<?php
/**
 * Abstrakte Hashtable
 * @abstract 
 */
abstract class HashTable Extends ArrayObject{
 
	/**
	 * Konstrukteur
	 * @param Array<Array<>>    2-Dimensionales Array
	 */
	public function __construct($input){
		foreach($input as $array){
			$this->append($array);
		}    
	}
 
	/**
	 * @abstract
	 * @param   Array       Array mit den Werten die für den Key verwendet werden
	 */
	abstract protected function getHashKey($array);
 
	/**
	 * @abstract
	 * @param   Array       Eingabe-Array
	 */
	abstract protected function getValueFromArray($array);
 
	/**
	 * Ein Array als Wert der Hashtable hinzufügen
	 * @param   Array       Array mit allen Werten      
	 */
	public function append($array){
		$hashkey = $this->getHashKey($array);
		$value = $this->getValueFromArray($array);
		parent::offsetset($hashkey, $value); 
	}
}
?>

Daraus leiten wir eine für diesen Fall speziefische Hashtable ab

<?php
/**
 * Spezifische HashTable 
 */
class MyHashTable extends HashTable{
	/**
	 * Gibt den Wert anhand der Parameter zurück
	 * @param $name
	 * @param $typ
	 */
	public function get($name, $typ){
		$keys = array('name' => $name, 'typ' => $typ);
		$hashkey = $this->getHashKey($keys);
		return parent::offsetGet($hashkey);            
	}
	/**
	 * @overwrite
	 * @param   Array('name'=>, 'typ'=>)
	 */
	protected function getHashKey($array){
		return $array['name'].'#'.$array['typ'];
	}
 
	/**
	 * @overwrite
	 * @param   Array
	 */
	protected function getValueFromArray($array){
		return $array['value'];
	}
}?>

Und so kann man das Ding dann anwenden

//Testdaten
$array[] = array('name' => '123', 'typ' => 'A', 'value' => 'abc');
$array[] = array('name' => '456', 'typ' => 'A', 'value' => 'def');
$array[] = array('name' => '789', 'typ' => 'B', 'value' => 'ghi');
 
//Hashtable anlegen
$hashTable = new MyHashTable($array);
//Wert aus Hashtable laden. In diesem Fall sollte 'def' rauskommen
echo $hashTable->get('456','A');
php/kompost/simplehashtable.txt · Last modified: 11.12.2013 11:57:04 (external edit)