PHP で複数の配列のデカルト積を生成する
はじめに:
複数の配列から組み合わせを生成するのはプログラミングにおける一般的なタスク。これらの配列のデカルト積は、入力配列の要素の可能なすべての組み合わせのリストです。
問題:
複数の部分配列を持つ配列が与えられた場合、テーブルを生成したいと考えています。これらのサブ配列の要素の一意の組み合わせがすべて含まれます。たとえば、2 つの部分配列がある場合:
$array[0][0] = 'apples'; $array[0][1] = 'pears'; $array[0][2] = 'oranges'; $array[1][0] = 'steve'; $array[1][1] = 'bob';
出力は次のようになると予想されます:
Array 0 Array 1 apples steve apples bob pears steve pears bob
解: デカルト積
この問題には次のものが必要です。デカルト積を計算します。これにより、複数の配列から要素の可能なすべての組み合わせが生成されます。
実装:
デカルト積を計算する 1 つのアプローチには、再帰関数の使用が含まれます。以下に実装例を示します。
function array_cartesian() { $_ = func_get_args(); if(count($_) == 0) return array(array()); $a = array_shift($_); $c = call_user_func_array(__FUNCTION__, $_); $r = array(); foreach($a as $v) foreach($c as $p) $r[] = array_merge(array($v), $p); return $r; }
この関数は複数の配列を入力として受け取ります。最初の配列を反復処理し、その各要素を残りの配列の可能なすべての組み合わせと組み合わせます。結果は、すべての一意の組み合わせのリストです。
例:
この解決策を例に適用してみましょう:
$cross = array_cartesian( array('apples', 'pears', 'oranges'), array('steve', 'bob') ); print_r($cross);
これは出力します:
Array ( [0] => Array ( [0] => apples [1] => steve ) [1] => Array ( [0] => apples [1] => bob ) [2] => Array ( [0] => pears [1] => steve ) [3] => Array ( [0] => pears [1] => bob ) )
これは予想される出力と一致します。
以上がPHPで複数の配列のデカルト積を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。