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

Toshiyuki Kajii php-users@php.gr.jp
Mon, 25 Nov 2002 16:59:21 +0900


梶井です。

* Sat, 23 Nov 2002 14:37:45 +0900
* masahiro iwai <m-iwai@info.human.nagoya-u.ac.jp> wrote:

>(w3,w12,w1),(w1,w7,w13)
>(w3,w12,w1),(w1,w7,w13),(w5,w10),(w13)
>(w3,w12,w1),(w1,w7,w13),(w10,w11),(w11),(w6)
>(w3,w12,w1),(w1,w7,w13),(w10,w11),(w11),(w6),(w11,w5)
>(w3,w12,w1),(w1,w7,w13),(w10,w11),(w11),(w6),(w10)
>上記のようなデータから組合せを生成したいと考えています.

>PHPというより,アルゴリズムの問題かと思いますが,私はPHP
>以外の言語に疎く,こちらに投稿させていただきました.

まさにアルゴリズムの問題な気もしますが...

$a = array(array(w3,w12,w1),array(w1,w7,w13));
print_r(combination($a));

function combination($array){
  if(count($array) == 0){
    return array();
  }
  $array_1st = array_shift($array);
  $array_sub = combination($array);
  $array_tmp = array();
  foreach($array_1st as $value){
    if(count($sub_array) == 0){
      $array_sub = array(array());
    }
    foreach($array_sub as $arr){
      array_unshift($arr, $value);
      array_push($array_tmp, $arr);
    }
  }
  return $array_tmp;
}

こんな感じでしょうか。


*---------------------------------------------------*
    Toshiyuki Kajii    梶井 俊幸
    e-mail:            mikoto@camino.nissan.ne.jp
*---------------------------------------------------*