So auf die Schnelle eine Hashtable nachgebildet
Zuerst eine abstrakte Hashtable, die so wiederverwendbar ist
<?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');