仕事で、出くわした仕様でした。
仕様においては、選択肢の最大が5つという事で、5個をサンプルデータとして検証しています。
おそらく、n個でも行けるはずです。
たぶん…
$patern = array(
'A' => 1,
'B' => 2,
'C' => 3,
'D' => 4,
'E' => 5,
);
$keys = array_keys( $patern );
print_r( CombinationPattern::getAll( $keys ) );
//CombinationPattern::getAll( $keys ) ;
exit;
//====================================================================================
class CombinationPattern {
function getAll( &$pattern, $flag = false ){
$ret = array();
$max = count( $pattern );
$num = $max;
if( $flag ){
for( $n = 1; $n 0; $n -- ){
$list = array();
$loop = gmp_intval( gmp_fact($max) ) /
( gmp_intval( gmp_fact($n) ) * gmp_intval( gmp_fact( $max - $n ) ) );
for( $na = 0; $na = $max ) $idx -=$max;
$tmp[] = $items[$idx];
$line[] = $idx;
$sum *= $idx + 1;
}
$len = count( $line );
$loop = $max - $len;
for( $nb = 0; $nb = $max ) $idx -= $max;
$tmp[$len] = $items[$idx];
$swp = $sum * ($idx + 1);
//debug
//$line[$len] = $idx;
//for( $i = 0; $i