Einzelnen Beitrag anzeigen
Alt 08.12.2004, 03:20  
Gast
 
Beiträge: n/a
Standard [Erledigt] Objektorientierter Zugriff auf Multidimensionale Arrays

Hallo,

als Neuling hier am Board, möchte ich gerne eine Diskussion anstoßen um mal eine Methode zu vergleichen, mit der ich arbeite.

Nehmen wir an ich verwende ein multidimensionales Array als Datenspeicher. Dieses Array ist jetzt eine Member-Variable einer instanzierten Klasse. Saubere OOP verbietet jetzt natürlich den direkten Zugriff auf diese Member-Variable wie z.B.:
Code:
$object->multiArray['auto']['tuer']['farbe'];
Statt dessen soll natürlich eine Methode den Zugriff übernehmen. Jetzt gehen wir davon aus, daß die Tiefe des multidimensionalen Arrays variabel ist und nicht vorher gesagt werden kann. Da in PHP Variablen-Bezeichnungen für multidimensionale Arrays leider nicht variabel gebildet werden können, habe ich dafür eine Browse-Methode geschrieben, die das Ziel einer Abfrage als Array übergeben bekommt, z.B.:
Code:
$object->getVar(array('auto', 'tuer', 'farbe'));
Die Methode getVar() gibt nun jeweils einen Wert des übergebenen Arrays an browseArray() weiter, welche diesen als Index für das multidimensionale Array benutzt und jeweils die nächste Ebene als Referenz übergeben läßt. Das geht solange bis kein Array mehr vorhanden ist, z.B.:
Code:
function getVar($position) {
	// Basis-Position
	$value =& $this->multiArray;

	// Geht schrittweise durch das von getVar() übergeben Objekt durch.
	for ($i = 0; $i < count($position); $i++) {
		if (!$value =& $this->browseArray($value, $position[$i])) {
			// Falsche Positionsangabe
			return false;
		}
	}

	// War die Positionsangabe korrekt, enthält $value jetzt den Inhalt des letzten Elements.
	return $value;
}

function &browseArray(&$array, $target) {
	if (is_array($array)) {
		if (array_key_exists($target, $array)) {
			return $array[$target];
		}
	}
	return false;
}
Das funktioniert auch wunderbar. Ich frage mich nur, ob es nicht bessere und vor allem schnellere Methoden gibt, die ich bisher übersehen habe.

Freue mich über jeden Kommentar.

Gruß
Ensis
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten