You are here: Re: [PHP] Predictable-random array « PHP « IT news, forums, messages
Re: [PHP] Predictable-random array

Posted by Jochem Maas on 06/21/05 00:30

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
>

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация