[PHP-users 11757] Re: 組合せの生成について質問

Eiji Miwa php-users@php.gr.jp
2002年11月25日 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 );
 
?>

AltStyle によって変換されたページ (->オリジナル) /