<?php
function computeCombination(array $source,$picks,$startIndex=0,array $pad=array())
{
if($picks<=0)
{
return array($pad);
}
elseif($picks>=count($source)-$startIndex)
{
return array(array_merge($pad,array_slice($source,$startIndex)));
}
$result=array();
foreach(range($startIndex,count($source)-$picks) as $subStartIndex)
{
$subPad=$pad;
$subPad[]=$source[$subStartIndex];
if(empty($pad))// to make the output look nice
{
$result=array_merge($result,computeCombination($source,$picks-1,$subStartIndex+1,$subPad));
}
else
{
$result=array_merge($result,array(computeCombination($source,$picks-1,$subStartIndex+1,$subPad)));
}
}
return $result;
}
print_r(computeCombination(array(1,2,3,4,5),2));
preferences:
41.31 ms | 402 KiB | 5 Q