PHP で複数の配列から組み合わせを生成する
はじめに
すべての組み合わせを生成するタスク複数の配列からの項目の欠落は、組み合わせ最適化の問題でよく発生します。この記事では、可変数のソース配列を処理できる関数の必要性に対処する再帰的ソリューションを紹介します。
問題ステートメント
異なる数のソース配列が複数あるとします。要素を使用して、項目のすべての組み合わせを検索します。組み合わせの数は、各配列内の要素の数の積と等しくなります。たとえば、次の配列があるとします:
$arrayA = array('A1','A2','A3'); $arrayB = array('B1','B2','B3'); $arrayC = array('C1','C2');
18 個の組み合わせの配列を生成することを目的としています:
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ... ]
再帰的解決策
次の再帰関数は、可能なすべての組み合わせを生成します。 items:
function combinations($arrays, $i = 0) { // If reaching the last array, return the array itself if (!isset($arrays[$i])) { return array(); } // If at the parent array, return the recursive call to the following array if ($i == count($arrays) - 1) { return $arrays[$i]; } // Get combinations from subsequent arrays $tmp = combinations($arrays, $i + 1); $result = array(); // Concatenate 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; }
デモ
次のコードは、組み合わせ関数の使用法を示しています。
print_r( combinations( array( array('A1','A2','A3'), array('B1','B2','B3'), array('C1','C2') ) ) );
これは、期待される配列を出力します。 18 通りの組み合わせ。
以上がPHP で複数の配列からすべての組み合わせを再帰的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。