[PHP-users 11757] Re: 組合せの生成について質問
Eiji Miwa
php-users@php.gr.jp
Mon, 25 Nov 2002 14:43:26 +0900
ミワです。こんにちは。
In message 「[PHP-users 11755] Re: 組合せの生成について質問」
masahiro iwai wrote...
>(w3,w12,w1),(w1,w7,w13),(w5,w10),(w13)
>
>w3,w1,w5,w13
>w3,w1,w10,w13
>w3,w7,w5,w13
>w3,w7,w10,w13
>w3,w13,w5,w13
>w3,w13,w10,w13
>w12,w1,w5,w13
>・・・
>
>のようにそれぞれの括弧から1つづつ選んだすべての組合せ
>です.
こんなのはどうですか?
<?php
$x = $a = $z = array();
$x = array( "w3","w12","w1","w7","w13","w5","w10" );
//(w3,w12,w1)
$a[0] = array( &$x[0],&$x[1],&$x[2] );
//(w1,w7,w13)
$a[1] = array( &$x[2],&$x[3],&$x[4] );
//(w5,w10)
$a[2] = array( &$x[5],&$x[6] );
//(w13)
$a[3] = array( &$x[4] );
function hoge( &$val1, &$val2 )
{
$tmp = array();
if ( count( $val1 ) > 0 ) {
for ( $i = 0; $i < count( $val1 ); $i++ ) {
for ( $j = 0; $j < count( $val2 ); $j++ ) {
$tmp[] = array_merge( $val1[$i], $val2[$j] );
}
}
$val1 = $tmp;
} else {
$val1 = $val2;
}
}
foreach( $a as $val ) { hoge( $z, $val ); }
print_r( $z );
//おまけ
$x[1] = "w99";
print_r( $z );
?>