in reply to
How do I make a random shuffle deterministic?
Another possibility would be to keep, for each IP address, a shuffled list of numbers [1..n] if you see that you do not have one already for this IP. Subsequent actual “shuffles” of the data would use the elements in this pre-shuffled list. (Another way to say it is to capture the successive results from rand($i+1) as per the algorithm code-sample above, and re-use them.) This has the possible advantage that it does not tamper with the (after all, global...) random-number seed value. (Fiddling with the seed, of course, has a potential negative effect on other intended-to-be random sequences that your program might need to generate for other, unrelated purposes. Capturing and re-using a sequence avoids this. There might be another way to do it of which I am simply not aware.)