Dotan Cohen wrote:
I've got an array $items which has about 200 entires. I want to print
it might be helpful to know where the array comes from. or maybe its a static definition to start with (nothing wrong with that as such :-) does $items change over time? in what way?
them out in random order, but as usual, I have a catch! I need to add a 'key' so that if need be, I can always return to the same 'random' order, like so: $items=predicatable_random($items, "qwerty");
the problem is persistence, if you want a random order that doesn't change then you have to create the random order, and then store an index for it somewhere. it may be feasable to either serialize the result and read it from disk when needed, or store a list of keys (an index of sorts) in file/db and use that to perform an ordering as required.
so for each place that I need the items rearranged, I will replace qwerty with a different string, and get a different 'random' order. I haven't played around with it much as I stumbled into a brick wall fairly early and can't get much going. Any ideas? I tried to play with usort, uksort, ksort, and various combinations with shuffle. The 'randomization' can be based on qualities of each string, such as 'sort alphebetically by the 7th character', so I
thats not random. maybe the 'key' you need to pass is a callback function whose job it is to produce a replicable (or random for that matter!) ordering somehow - depending on the complexity of the calculation and size of the dataset you may need to cache (look at http://php.net/mt_srand if you need predictable [psuedo]randomness without cacheing (using 'fixed' seeds), and check the usernotes on http://php.net/shuffle also). e.g: $items = array( /* |--char 7 */ "cherries", "bananas", "orangejuice", "red apples", "smelly fish", "more bananas", "ship full of bananas", "tarantula", "poisoned apple", /* |--char 7 */ ); function permaRandom($items, $callback) { /* caching left as an exercise to the reader ;-/ */ if (is_callable($callback)) { $items2 = /*($yes = gotcachedpermarandom($callback)) ? getfromcache($callback) : */call_user_func($callback, $items); /* if ($yes) storeincache($callback, $items2); */ } return $items2; } function sortAlphaChar7Random($items) { $keys = $items2 = array(); // assumption made that $item is a string // and at least 7 chars long, oh and spaces // wont do much good for the sorting probably.. foreach ($items as $k => $item) { $keys[$k] = @$item{7}; } asort($keys, SORT_LOCALE_STRING | SORT_STRING); foreach ($keys as $k => $v) { $items2[] = $items[$k]; } return $items2; } var_dump(permaRandom($items, "sortAlphaChar7Random"), permaRandom($items, "sortAlphaChar7Random"), permaRandom($items, "sortAlphaChar7Random"));
thought that I'd try that, but I got lost in explodes and such. Thanks all. I always look forward to my php lessons! Dotan http://english-lyrics.com/el/index.php Song Lyrics
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php