PHPで組み合わせをすべて表示
PHPで数学の「組み合わせ」をすべてリストアップするコードを書いてみました。
「組み合わせ」とは、n 個からm 個を選ぶ場合のすべてのパターンのことで、そのパターンの数は
=n!/(m!(m-n)!)
で表されます。
例えば、「1,2,3,4,5,6」という6個から4個を選ぶ場合には
1234、1235、1236、1245、1246、1256、1345、1346、1356、1456、2345、2346、2356、2456、3456
という15通りのパターンができます。
サンプル
下の関数「kumiawase」に、選ぶ元となる全体を配列で与え、また抜き取る数を与えると、すべてのパターンを配列で返します。
function kumiawase($zentai,$nukitorisu){
$zentaisu=count($zentai);
if($zentaisu<$nukitorisu){
return;
}elseif($nukitorisu==1){
for($i=0;$i<$zentaisu;$i++){
$arrs[$i]=array($zentai[$i]);
}
}elseif($nukitorisu>1){
$j=0;
for($i=0;$i<$zentaisu-$nukitorisu+1;$i++){
$ts=kumiawase(array_slice($zentai,$i+1),$nukitorisu-1);
foreach($ts as $t){
array_unshift($t,$zentai[$i]);
$arrs[$j]=$t;
$j++;
}
}
}
return $arrs;
}
$zentaisu=count($zentai);
if($zentaisu<$nukitorisu){
return;
}elseif($nukitorisu==1){
for($i=0;$i<$zentaisu;$i++){
$arrs[$i]=array($zentai[$i]);
}
}elseif($nukitorisu>1){
$j=0;
for($i=0;$i<$zentaisu-$nukitorisu+1;$i++){
$ts=kumiawase(array_slice($zentai,$i+1),$nukitorisu-1);
foreach($ts as $t){
array_unshift($t,$zentai[$i]);
$arrs[$j]=$t;
$j++;
}
}
}
return $arrs;
}
使用例
「1,2,3,4,5,6」という6個から4個を選ぶ場合の使用例を示します。





















最近のコメント