[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 );
  
?>