======[PHP] Extended ArrayObject====== value = $value;} public function getValue(){return $this->value;} } class Verwaltung extends ArrayObject{ /** $array ist hier nur ein Beispiel. Dieser Array wird später aus der DB geladen */ public function __construct($array, $filter = false){ if (is_array($filter)) $array = self::multiFilter($array, $filter); else if ($filter) $array = self::singleFilter($array, $filter); parent::__construct($array, ArrayObject::ARRAY_AS_PROPS); } /** Eingebauter Filter für ein Filterstring */ public function filterByFilterString($filterString){ return self::singleFilter($this, $filterString); } /** Eingebauter Filter für ein Value */ public function filterBySingleValue($value){ return self::multiFilter($this, $value); } /** Eingebauter Filter für mehrere Values */ public function filterByArray($valueArray){ return self::multiFilter($this, $valueArray); } private static function singleFilter($arrayA, $filterString){ return array_filter(self::convertToArray($arrayA), create_function('$obj', $filterString)); } private static function multiFilter($arrayA, $valueArray){ return array_uintersect(self::convertToArray($arrayA), self::convertToArray($valueArray), create_function('$a, $b', '$a = is_object($a)? $a->getValue(): $a; $b = is_object($b)? $b->getValue(): $b; return strcasecmp($a." ", $b." ");') ); } private static function convertToArray($variant){ if ($variant instanceof ArrayObject) return $variant->getArrayCopy(); elseif (is_array($variant)) return $variant; elseif ($variant instanceof A) return array($variant); else return array($variant); } } $testDaten = array('k1' => new A(11), 'k2'=>new A(22), 'k3'=>new A(33)); //Construct ohne Datenfilter $v = new Verwaltung($testDaten); //Ausgabe aller A echo "
Ausgabe aller A:
"; var_dump($v); //Ausgabe als Property echo "
Ausgabe als Property:
"; var_dump($v->k2); //Ausgabe über Index echo "
Ausgabe über Index:
"; var_dump($v['k1']); //Ausgabe über array_filter echo "
Ausgabe über array_filter:
"; var_dump(array_filter($v->getArrayCopy(), create_function('$obj', 'return $obj->getValue()==22 || $obj->getValue() ==33;'))); echo "
Eingebauten filterByFilterString nutzen:
"; var_dump($v->filterByFilterString('return $obj->getValue()==22 || $obj->getValue() ==33;')); echo "
Eingebauten filterBySingleValue nutzen:
"; var_dump($v->filterBySingleValue(11)); echo "
Eingebauten filter2 nutzen:
"; var_dump($v->filterByArray(array(11,33))); //Construct mit Datenfilter $v = new Verwaltung($testDaten, 'return $obj->getValue()==11;'); echo "
Construct mit Datenfilter:
"; var_dump($v); //Construct mit Datenfilter $v = new Verwaltung($testDaten, array(11, 22)); echo "
Construct mit Mehrfachdatenfilter:
"; var_dump($v); ?>
---- Kategorien: [[CatPhp]]