Hi,
Trotzdem würde _ich_ nicht auf die von dir vorgestellte Art, Daten zu speichern, ausweichen. Die Nachteile erscheinen mir einfach zu groß, insbesonders, wenn man sich überlegt, mit welchen Laufzeiten die von dir vorgestellten Ausweichfunktionen funktionieren.
Hast Du die denn mal getestet gegenüber der orthogonalen Standardlösung?
nein, deswegen nutzte ich das Wort "erscheinen". Was ich beschrieb, sind theoretische Überlegungen.
Beispiele aus deinem Artikel, n sei die Anzahl der Einträge, m die Anzahl der Eigenschaften pro Eintrag.
function get_record (&$_data, $recno)
{
$_rec = array();
foreach ($_data as $colname => $field)
{
$_rec[$colname] = isset($_data[$colname][$recno])?$_data[$colname][$recno]:NULL;
}
return $_rec;
}
Für die Laufzeit hast du die for-Schleife, welche du ganz durchlaufen musst (O(m)), und dann noch die Array-Zugriffe (O(log n)), also O(m log n) zusammen.
In der üblichen Speicherung brauchst du dafür nur O(log n).
Das zieht sich durch deine anderen Funktionen durch. Als Vorteil hast du, dass du bequemer die PHP-Array-Funktionen nutzen kannst. Mit erwähnten array_map/array_reduce/... kannst du aber hier jegliches Verhalten für Objekt-Arrays einigermaßen bequem nachbauen, insbesondere, wenn du Callback-Funktionen nutzen kannst. Für die Laufzeit sollte das keinen wesentlichen Unterschied machen.
Nun ist Laufzeit sicherlich nicht das Hauptproblem von PHP-Code. Bei großen Datenmengen macht man sich sicherlich Gedanken, ob man den dauerhaft im Speicher halten sollte (z.B. Datenbank-Resultsets können ja auch jeweils von der Datenbank einzeln abgeholt werden, ohne sie alle gleichzeitig im PHP-Speicher halten zu müssen; hier hätte man auch gleich die objektartige Speicherung).
Bis die Tage,
Matti