値の配列を含む次の配列があります。
$array = array(
array('1', '2'),
array('a', 'b', 'c'),
array('x', 'y'),
);
任意の数の配列が存在する可能性があり、配列には任意の数の値を含めることができます。現在、各配列から 1 つの値が取得されるすべての組み合わせを生成するコードがあります。例えば:
1ax, 1ay, 1bx, 1by, 1cx, 1cy, 2ax, 2ay, 2bx, 2by, 2cx, 2cy
ただし、実際に必要なのは、各列に値が 1 つだけある組み合わせのみです。1ax は、1、a、x の 3 つの値すべてが最初の列にあるため、適切ではありません。1by は、b と y が 2 番目の列にあるため、適切ではありません。したがって、上記の例から、これらの組み合わせのみが有効になります。
1cy, 2cx
私は当初、すべての組み合わせを生成し、競合のあるものを除外することを計画していましたが、これは単純化しすぎた例であるため、拡張できません。実際のアプリケーションでは、潜在的に何百万もの組み合わせ (競合するものを含む) が存在する状況が発生します。 )。
誰でもこれを解決するためのより良い方法を手伝ってもらえますか? 私は PHP で作業していますが、ロジックを明確に示すコード サンプルは役に立ちます。
前もって感謝します。
アップデート:
ベンチマークを取得するために、より大きなデータセットに対して機能するソリューションをテストしました。これまでの結果は次のとおりです。
$array = array(
array('1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3'),
array('a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'),
array('x', 'y', 'z', 'x', 'y', 'z', 'x', 'y', 'z'),
array('1', '2', '3', '1', '2', '3', '1', '2', '3'),
array('a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'),
array('x', 'y', 'z'),
);
Josh Davis 2番目のソリューション:
Combinations: 249480
Time: 0.3180251121521 secs
Memory Usage: 22.012168884277 mb
Peak Memory Usage: 22.03059387207 mb
ジョシュ・デイビス:
Combinations: 249480
Time: 1.1172790527344 secs
Memory Usage: 22.004837036133 mb
Peak Memory Usage: 22.017387390137 mb
トム・ヘイ:
Combinations: 249480
Time: 5.7098741531372 secs
Memory Usage: 39.145843505859 mb
Peak Memory Usage: 39.145843505859 mb