データベースからのレコードの配列があります(データベースはこの質問とは無関係ですが、最終的には「行」の配列になり、各行はフィールド名に対応する文字列キーを持つ配列になります)。例えば:
$items = array(
1 => array('id' => 1, 'name' => 'John', 'created' => '2011-08-14 8:47:39'),
2 => array('id' => 2, 'name' => 'Mike', 'created' => '2011-08-30 16:00:12'),
3 => array('id' => 5, 'name' => 'Jane', 'created' => '2011-09-12 2:30:00'),
4 => array('id' => 7, 'name' => 'Mary', 'created' => '2011-09-14 1:18:40'),
5 => array('id' => 16, 'name' => 'Steve', 'created' => '2011-09-14 3:10:30'),
//etc...
);
私がやりたいのは、この配列をシャッフルすることですが、どういうわけか、より新しい「作成された」タイムスタンプを持つアイテムにより多くの「重み」を与えます。ランダム性は完全である必要はなく、正確な重みは私にとって実際には重要ではありません。言い換えれば、人間にはちょっとランダムに見えるが数学的にはランダムではない、速くて簡単なテクニックがあれば、私はそれで大丈夫です。また、タイムスタンプの「無限の連続体」でこれを行うのが簡単でない場合は、各レコードを1日または1週間に割り当て、それらがどの曜日または週にあるかに基づいて重み付けを行うのが適切です。 。
このランダム化は、私のWebサイトの特定のページが読み込まれるたびに発生するため、比較的高速で効率的な手法が望ましいです(ただし、効率的に実行できない場合は、定期的に実行して結果をキャッシュしてもかまいません)。