The problem goes as follows - 1. I had to store class names, it's associated db table, and the filename of the class. 2. Usually only 1 of these factors was known. 3. The data was in continuous flux. 4. It needed to be faster and more flexible than a database. 5. I could not think of a better way to do it. (there probably is) How it works - Build an array of associative array's that looks something like: $aFoo = array(); $aFoo = array(); $aFoo['fieldName'] = 'foo'; // Insert your field name here. The key 'fieldName' has to be there. $aFoo['required'] = true; // True or False? Should the field be required when storing data? $aFoo = array(); $aFoo['fieldName'] = 'bar'; // The name of another field to store data in. $aFoo['required'] = false; // Is this one required? Then create the object like: $oArrayCube = new ndArray($aFoo); // $aFoo is used as a blueprint for the data structures. How to use it - Storing data: $aData = array(); $aData['foo'] = 'someData'; $aData['bar'] = 'moreData'; $key = $oArrayCube->insert($aData); // Returns an integer that is the address to get it back out again. $aData = null; // Go ahead and kill the original, its stored. Getting data: $aData = $oArrayCube->get($key); // Now all the data is back. or $aKey = array(); // Build an array of keys to get $aKey = 1; $aKey = 2; $aData = $oArrayCube->get($aKey); // Now $aData is an array of associative arrays containing data. Updating data: $oArrayCube->insert($aData, $key); // Store the data in $key, do not generate a new $key. Finding data: If you don't have a key to get the data, then you have to search for it. $aKeys = $oArrayCube->search('someData'); // Returns an array of keys that matched. Look in all fields. or $aKeys = $oArrayCube->search('someData', 'foo') // Returns an array of keys that matched. Only look in field 'foo'. After you have the matching keys, then you can $oArrayCube->get() them. Removing data: $oArrayCube->delete($key); // Returns True/False. Pretty self-explanatory Reindexing: $oArrayCube->reindex(); // For the most part, this should not have to be done. Keys #'s may change. Clears out empty keys. Brian Roach email@example.com Comments, critiques, and better ways are always welcome.