ここでは、はるかに速く実行する必要がありますあなたが説明する簡単なコードです。
$numbers = range(1, 99); // numbers to pick from
$length = 5; // amount of items in the set
$sets_amount = 15; // amount of sets you want to generate
shuffle($numbers); // randomize
function get_set($length, &$numbers) {
return array_splice($numbers, 0, $length);
}
for ($i = 0; $i < $sets_amount; $i++)
print_r(get_set($length, $numbers));
注:いくつかの組み合わせが必要な場合にのみ機能します。あなたは可能なものすべてが欲しいと述べていないので、私はあなたがそれらの束を必要とすると思った - ここでそれを行うには非常に簡単かつ簡単な方法です。
少し遅く(生成するほど遅くなる)、を生成します。の量があれば、このコードを使用できます。
$numbers = range(1, 99); // numbers to pick from
$length = 5; // amount of items in the set
$sets_amount = 200; // amount of sets you want to generate
$existing = array(); // where we store existing sets
$shuffle_period = count($numbers) - $length - 1; // how often we re-randomize the elements
$j = 0;
for ($i = 0; $i < $sets_amount; $i++, $j++) {
if (!($i % $shuffle_period)) {
shuffle($numbers); // randomize at first go and on $shuffle_period
$j = 0;
}
do {
$arr = array_slice($numbers, $j, $length);
} while (in_array($arr, $existing));
$existing[] = $arr;
}
print_r($existing);
fisher-yates shuffleを検索します。 –
あなたはこれを行うために必要なメモリ量を認識していますか? 199から5の71,523,144のユニークな組み合わせがあります。実際にすべての組み合わせを知る必要があるのはなぜですか?それらをすべて作業するより良い選択肢はほとんどありません。必要な数のシャッフルされたユニークを生成するだけで、71,523,144よりはるかに少ないでしょう。 –
[ループ速度を下げる方法]の複製が可能です(http://stackoverflow.com/questions/3109887/how-to-reduce-for-loop-speed) –