複数の PHP 配列内の項目の組み合わせの生成
さまざまな長さの複数の配列を扱う場合、考えられるすべての組み合わせを生成するのは困難になります。彼らの要素。この記事では、この問題に対処し、汎用性の高い PHP ソリューションを提供します。
このタスクは、任意の数の配列を受け入れ、それらの要素の可能なすべての組み合わせを含む配列を出力する関数を作成することです。たとえば、次の 3 つの配列があるとします:
$arrayA = array('A1', 'A2', 'A3'); $arrayB = array('B1', 'B2', 'B3'); $arrayC = array('C1', 'C2');
必要な出力は 18 個の組み合わせの配列になります:
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ['A1', 'B2', 'C2'], ['A1', 'B3', 'C1'], ['A1', 'B3', 'C2'], ['A2', 'B1', 'C1'], ['A2', 'B1', 'C2'], ['A2', 'B2', 'C1'], ['A2', 'B2', 'C2'], ['A2', 'B3', 'C1'], ['A2', 'B3', 'C2'], ['A3', 'B1', 'C1'], ['A3', 'B1', 'C2'], ['A3', 'B2', 'C1'], ['A3', 'B2', 'C2'], ['A3', 'B3', 'C1'], ['A3', 'B3', 'C2'], ]
ソリューションは再帰的アプローチを採用します:
function combinations($arrays, $i = 0) { if (!isset($arrays[$i])) { return array(); } if ($i == count($arrays) - 1) { return $arrays[$i]; } // get combinations from subsequent arrays $tmp = combinations($arrays, $i + 1); $result = array(); // concat each array from tmp with each element from $arrays[$i] foreach ($arrays[$i] as $v) { foreach ($tmp as $t) { $result[] = is_array($t) ? array_merge(array($v), $t) : array($v, $t); } } return $result; }
この関数は配列の配列を入力として受け取り、再帰カウンター $i をゼロに初期化します。インデックス $i にある現在の配列が存在するかどうかを確認し、存在しない場合は空の配列を返します。 $i が最後のインデックスと等しい場合、基本ケースを意味し、現在の配列が返されます。
それ以外の場合は、組み合わせを再帰的に呼び出して、$tmp に格納されている後続の配列の組み合わせを取得します。空の $result 配列を初期化し、インデックス $i で現在の配列を反復処理します。この配列内の各要素について、$tmp の各組み合わせと連結し、結果を $result に追加します。
このプロセスは、すべての組み合わせが生成されるまで再帰的に展開されます。結果の配列が返され、入力配列内の項目の可能なすべての組み合わせを表します。
以上がさまざまな長さの複数の PHP 配列から要素の考えられるすべての組み合わせを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。