すごい
関数を使用することはできますか?
$arr = array( array('a','b','c'), array('c','f'), array('g','z'), array('x','y'));//$arr子集元素长度可能会多一些//将$arr的子集元素与$arr其他子集元素两两组合或者三三四四组合//子集array('a','b','c')中的元素不需要组合//两两组合$newarr = array( array('a','c'), array('a','f'), array('b','c'), array('b','f'), array('c','c'), array('c','f'), ……)//三三组合$newarr = array( array('a','c','g'), array('a','f','g'), array('b','c','g'), array('b','f','g'), array('c','c','g'), array('c','f','g'), ……)//四四组合$newarr = array( array('a','c','g','x'), array('a','f','g','x'), array('b','c','g','x'), array('b','f','g','x'), array('c','c','g','x'), array('c','f','g','x'), ……)
Combination (n と m の組み合わせ) と Descartes (デカルト積) 関数を組み合わせるだけです
実際、そうする必要はありませんたった 1 つの関数として記述され、1 つの関数として記述されると、その普遍性が失われます
私も最初は、最初に同じ長さの配列を取得し、次にデカルト積を求めるべきだと考えました
最初に再帰を使用し、次に積を求め、最後に配列をマージしますか?
この場合、
//$arr:原始数组,$cNum:组合长度function getCombination($arr,$cNum){ ……}
function getCombination($arr, $cNum) { $res = array(); foreach( Combination($arr, $cNum) as $item) { $res = array_merge($res, Descartes($item)); } return $res;}
一般的に使用されるアルゴリズムは、コード ベースを形成する関数として記述される必要があります。必要に応じて呼び出してください。毎回記述する必要はありません
一般的に使用されるアルゴリズムは、コードベースを形成する関数として記述される必要があります。必要なときに呼び出してください。毎回書く必要はありません
モデレーター、ありがとうございます。私は寝ています。書いたものをすぐに読み、学び、学び、また学びます