X
    Categories: PHP

n個の選択肢から重複しない全ての組合せを求める

仕事で、出くわした仕様でした。
仕様においては、選択肢の最大が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 
健巳:
Related Post