On Mon, 2005-01-10 at 11:28, Richard Lynch wrote: > Thomas Goyne wrote: > > On Sun, 09 Jan 2005 15:59:43 +0100, M. Sokolewicz <tularis@xxxxxxx> wrote: > > > >> that's not a SPECIFIC place in the array, that's just current, next and > >> previous. AFAIK there is no way to explicitly set the internal pointer > >> of the array to a spcified place. I used a function which basically > >> looped trough the array until it got to the correct depth, and then > >> returned it by reference....but it's not very efficient :S > >> > > > > Why would you ever want to do that other than to waste cycles? > > I'll give you a simple case. > > I have a GTK PHP MP3 ID3 editor application I'm working on. > > When one opens a file in a directory, I provide next/prev buttons to > quickly page to the next/prev file in the directory. > > Getting the next/prev to work is simple enough, but... > > I've got the whole array built from opendir/readdir, and sorted it into > alphabetical order. > > I've got a filename inside that array, from the pre-defined > GtkFileSelection dialog. > > So I need to initialize the internal array pointer to the position of the > file within that array, there is no such PHP function. Why not change your structure? Sounds like you want a linked list, better yet a doubly linked list. So create a double linked list class, link up your entries, and keep a hash available for fast lookup into the linked list where the keys are the filenames or whatever you want to use as an index, and the value is a reference to the interesting linked list node. Given that scenario you will have a currNode object which is the currently selected song, and when someone moves up or down the list you just do something like: if( $currNode->hasNext() ) { $currNode = &$currNode->next(); } Moving backward would be as simple as: if( $currNode->hasPrevious() ) { $currNode = &$currNode->previous(); } And if the user selects an arbitrary file: $currNode = &$lookupArray[$index]; This kind of structure works a lot like a doubly threaded red-black tree :) Although a red-black tree would keep your entries in sorted order whenever you add new entries in O( lg n ) time. Cheers, Rob. -- .------------------------------------------------------------. | InterJinn Application Framework - http://www.interjinn.com | :------------------------------------------------------------: | An application and templating framework for PHP. Boasting | | a powerful, scalable system for accessing system services | | such as forms, properties, sessions, and caches. InterJinn | | also provides an extremely flexible architecture for | | creating re-usable components quickly and easily. | `------------------------------------------------------------' -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php